第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,可使得代碼的邏輯清晰、可讀性強。這有利于工作效率的提高。