call 存储过程时必须声明表示符_图解面试题:SQL存储过程有什么用?
面試中有時候會問:存儲過程有什么用?看了今天的知識,你就知道如何回答了。
1.存儲過程是什么?
假如你每天要開車完成一些列重復的操作:車鑰匙啟動車,倒車。現在出現了一款新車,可以自動的完成這些重復的工作。每次你上車以后,車就自動幫助你倒出來了。
同樣的,在工作里也會經常遇到重復性的工作,這時候就可以把常用的SQL寫好存儲起來,這就是存儲過程。
這樣下次遇到同樣的問題,直接使用存儲過程就可以了,就不需要再重新寫一遍SQL了,這就極大的提高了工作效率。
2.如何使用存儲過程?
使用存儲過程需要:1)先定義存儲過程 2)使用已經定義好的存儲過程。
(1)無參數的存儲過程
定義存儲過程的語法形式:
create procedure 存儲過程名稱()begin??;end;語法里的begin...end用于表示sql語句的開始和結束。語法里面的就是重復使用的sql語句。下面通過一個例子看下如何使用。例如查出“學生表”里的學生姓名。
sql語句是:
select?姓名?from?學生表;把這個sql語句放入存儲過程的語法里,并給這個存儲過程起個名字叫做就a_stuent1:
create?procedure?a_stuent1()begin?select 姓名 from 學生表;end;在navicat里允許以后,建立的存儲過程就會在下圖的地方:
下次使用存儲過程的用下面sql語句就可以,就不需要重新寫一遍sql了。
call?存儲過程名稱();(2)有參數的存儲過程
前面的存儲過程名稱后面是(),括號里面沒有參數。當括號里面有參數時,就是下面的語法:
create?procedure?存儲過程名稱(參數1,參數2,...)begin??;end;通過一個案例看下,現在要在“學生表”里查找出指定學號的學生姓名。如果指定學號是0001,那么sql語句是:
select 姓名 from 學生表where?學號='0001';現在問題來了,一開始不知道指定學號是哪一個,只有使用的時候才知道業務需求。比如今天要查找學號0001,明天要查找學號002。這時候就需要用到參數,來靈活應對這種情況。把sql語句放入存儲過程語法里就是:
create?procedure?getNum(num?varchar(100))begin select 姓名 from 學生表where?學號=num;end;其中getNum是存儲過程的名稱,后面括號里面的num varchar(100)是參數,參數由2部分組成:參數名稱是num;參數類型是是varchar(100),這里表示是字符串類型。
存儲過程里面的sql語句(where 學號=num)使用了這個參數num。這樣在使用存儲過程的時候,給定參數的值就可以靈活的按業務需求來查詢了。
比如現在要查詢學號=0001的學生姓名,那么就在使用存儲過程的參數中給出學號的值,也就是下面括號里的0001:
call?getNum(0001);3)默認參數的存儲過程
前面的存儲過程名稱后面是(參數1,參數2),括號里面只包含參數的類型和名字,方便調用。
存儲過程還一種情況是有默認參數,是下面的語法。
in 輸入參數:參數初始值在存儲過程前被指定為默認值,在存儲過程中修改該參數的值不能被返回。
out輸出參數:參數初始值為空,該值可在存儲過程內部被改變,并可返回
inout輸入輸出參數:參數初始值在存儲過程前被指定為默認值,并且可在存儲過程中被改變和在調用完畢后可被返回
3.有哪些注意事項
1)定義存儲過程語法里的SQL語句代碼塊必須是完整的sql語句,必須用“;”結尾
create procedure 存儲過程名稱(參數1,參數2,...)begin ;end;2)定義不同的存儲過程,要使用不同的存儲過程名稱,相同的存儲過程的名字會引起系統報錯。
4.存儲過程有什么用?
如果業務比較復雜、重復性工作比較多,存儲過程會比較實用。
把重復要做的事情整理成一步一步的業務步驟,然后把業務步驟寫成sql語句,然后再把sql語句寫到存儲過程的語法里。就像自動駕駛一樣,把可能遇到的狀況提前規劃好,就不需要自己操縱方向盤,車子就按照我們寫的步驟向前開了。
推薦:如何從零學會sql?
?
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的call 存储过程时必须声明表示符_图解面试题:SQL存储过程有什么用?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win32按钮按下不弹起_为什么厨房插座
- 下一篇: linux cmake编译源码,linu