第2部分 資料庫SQL語言
資料庫指令碼中的begin與end
在資料庫指令碼中,begin與end是一對奇怪的單詞。缺少它們,某些代碼看起來會讓人一頭霧水;添加它們,代碼的結構瞬間就清晰了。
確實,begin與end作為代碼語句的開始和結束標誌,可以讓指令碼程式的邏輯明確,易於閱讀。
begin與end主要用在以下地方:
1. if、else、else if、while等語句中
if、else、else if、while等語句要自佔一行,執行語句不得緊跟其後,不論執行語句有多少都要加語句塊標誌begin…end。
指令檔中的begin和end應獨佔一行並且位於同一起始列,同時與引用它們的語句靠左對齊。begin…end之內的代碼塊使用縮排,一般縮排為4個空格。
正例:
if (@varible1 < @varible2)
begin
[執行語句]
end
反例1:
if (@varible1 < @varible2)
[執行語句1]
[執行語句2]
在反例1中,由於缺少了begin和end,因此對“執行語句1”和“執行語句2”的“歸屬問題”帶來了疑惑,很容易讓人把代碼的邏輯搞錯。
反例2:
if (@varible1 < @varible2)
begin
[執行語句]
end
在反例2中,begin和end沒有位於同一起始列,也沒有與引用它們的語句靠左對齊。這樣一看,代碼就顯得很淩亂。
反例3:
if (@varible1 < @varible2) begin
[執行語句]
end
在反例3中,begin與if語句位於同一程式碼,這也是不規範的。
2. 建立預存程序(函數、觸發器等)時
建立預存程序(函數、觸發器等)時,無論預存程序(函數、觸發器等)的執行語句內容部分有多少行,都必須以begin開始,end結束,並且在end後面不加預存程序(函數、觸發器等)名。
樣本1(基於Sybase資料庫建立預存程序):
if exists (select 1 from sysobjects where name = 'pr_example’)
begin
drop procedure pr_example
end
go
create procedure pr_example
@name varchar(30), -- 姓名
@age int -- 年齡
as
declare @begintime varchar(20), -- 開始時間
@endtime varchar(20) -- 結束時間
begin
[執行語句部分]
end
go
print 'create procedure pr_example ok'
go
樣本2(基於Oracle資料庫建立預存程序):
create or replace procedure pr_example
(
v_name in varchar2, -- 姓名
v_age out int -- 年齡
)
as
begintime varchar2(20); -- 開始時間
endtime varchar2(20); -- 結束時間
begin
[執行語句部分]
end;
/
prompt 'create procedure pr_example ok';
此外,建立預存程序(函數、觸發器等)時,每個參數都必須單獨位於一行,不允許換行或一行多個參數。該參數的注釋要麼和該參數位於同一行,要麼單獨佔一行,不允許在參數行上換行。如下的代碼是不規範的:
樣本3(基於Oracle資料庫建立預存程序):
create or replace procedure pr_example
(
v_name
in varchar2, -- 姓名
v_age out int
-- 年齡
)
as
begintime varchar2(20); -- 開始時間
-- 結束時間
endtime
varchar2(20);
begin
[執行語句部分]
end;
/
prompt 'create procedure pr_example ok';
在實際的軟體項目中,恰當地使用begin與end,可使得代碼的邏輯清晰、可讀性強。這有利於工作效率的提高。
(本人微博:http://weibo.com/zhouzxi?topnav=1&wvr=5,號:245924426,歡迎關注!)