1. 程式人生 > 實用技巧 >影象直線分析和擬合工具——opencv

影象直線分析和擬合工具——opencv

面試中有時候會問:儲存過程有什麼用?看了今天的知識,你就知道如何回答了。

1.儲存過程是什麼?
假如你每天要開車完成一些列重複的操作:車鑰匙啟動車,倒車。現在出現了一款新車,可以自動的完成這些重複的工作。每次你上車以後,車就自動幫助你倒出來了。

同樣的,在工作裡也會經常遇到重複性的工作,這時候就可以把常用的SQL寫好儲存起來,這就是儲存過程。

這樣下次遇到同樣的問題,直接使用儲存過程就可以了,就不需要再重新寫一遍SQL了,這就極大的提高了工作效率。

2.如何使用儲存過程?

使用儲存過程需要:1)先定義儲存過程 2)使用已經定義好的儲存過程。

(1)無引數的儲存過程

定義儲存過程的語法形式:

create procedure 儲存過程名稱()
begin 
<sql語句> ;
end;

語法裡的begin...end用於表示sql語句的開始和結束。語法裡面的<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 
<sql語句> ;
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 
<sql語句> ;
end;

2)定義不同的儲存過程,要使用不同的儲存過程名稱,相同的儲存過程的名字會引起系統報錯。

4.儲存過程有什麼用?

如果業務比較複雜、重複性工作比較多,儲存過程會比較實用。

把重複要做的事情整理成一步一步的業務步驟,然後把業務步驟寫成sql語句,然後再把sql語句寫到儲存過程的語法裡。就像自動駕駛一樣,把可能遇到的狀況提前規劃好,就不需要自己操縱方向盤,車子就按照我們寫的步驟向前開了。

推薦:如何從零學會sql?