PL/SQL 处理流程
P249 -P254? oracle8i_9i數據庫基礎——查看本號百度文庫
***********PL/SQL 簡介***************
1、PL/SQL 是過程語言(Procedural Language)與結構化查詢語言(SQL)結合而成的編程語言
2、PL/SQL 是對SQL的擴展
3、支持多種數據類型,如大對象和集合類型,可使用條件和循環等控制結構
4、可用于創建存儲過程、觸發器和程序包,給SQL語句的執行添加程序邏輯
5、與 Oracle 服務器和 Oracle 工具緊密集成,具備可移植性、靈活性和安全性
§11.2.2? *********************PL/SQL 可用的SQL語句*******************
PL/SQL是Oracle系統的核心語言,現在Oracle的許多部件都是由PL/SQL寫成。在PL/SQL中可以使用的SQL語句有:
在PL/SQL中可以用的SQL語句有:
INSERT
UPDATE
DELETE
SELECT INTO
COMMIT
ROLLBACK
SAVEPOINT
提示:在 PL/SQL中只能用 SQL語句中的 DML 部分,不能用 DDL 部分,
如果要在PL/SQL中使用DDL(如Create? table? 等)的話,只能以動態的方式來使用。
Oracle 的 PL/SQL 組件在對 PL/SQL 程序進行解釋時,同時對在其所使用的表名、列名及數據類型進行檢查。
PL/SQL 可以在SQL*PLUS 中使用。PL/SQL 可以在高級語言中使用。
PL/SQL可以 在Oracle的 開發工具中使用。
其它開發工具也可以調用PL/SQL編寫的過程和函數,如Power Builder 等都可以調用服務器端的PL/SQL過程。
/**************************PL/SQL塊的結構如下:*************************/
Declare
/*?? 聲明部分: 在此? 聲明PL/SQL用到的變量,類型及光標 */
begin
/*? 執行部分:? 過程及SQL 語句? , 即程序的主要部分? */
Exception
/* 執行異常部分: 錯誤處理? */
End;
************************************第十三章PL/SQL 處理流程**************************
在PL/SQL程序中,要使程序能按照邏輯進行處理,除了有些語句是SQL語句外,還必須有能進行邏輯控制的語句。下面就介紹進行處理流程的語句結構。
§13.1? /*********條件語句**********條件語句*********************條件語句******/
IF <布爾表達式> THEN
PL/SQL 和 SQL語句
END IF;
IF <布爾表達式> THEN
PL/SQL 和 SQL語句
ELSE
其它語句
END IF;
IF <布爾表達式> THEN
PL/SQL 和 SQL語句
ELSIF < 其它布爾表達式> THEN
其它語句
END IF;
提示: ELSIF 不能寫成 ELSEIF
例:
declare
v_salary annualsalary.nannualsalary%TYPE;--annualsalary.nannualsalary%TYPE 為 "表名.字段名%type"
v_output varchar(100);
begin
select nannualsalary into v_salary??? --為v_salary 賦值
from annualsalary where nyear=1997;
if v_salary <40000 then
v_output:='1員工工資小于40000';
elsif v_salary>50000 then
v_output:='1員工工資大于50000';
else
v_output:='1員工工資在40000到50000之間';
end if;
dbms_output.put_line(v_output);
end;
§13.2? 循環
1.? 簡單循環? ****************loop end loop*************loop? end loop*******************loop?? end loop****************
Loop
要執行的語句;
end loop;
--此循環將執行到遇到一條 exit 語句為止.
例1.
declare
x? number;
begin
x:= 0;
loop
x:=x+1;
dbms_output.put_line(to_char(x));
exit? when x=10;
end loop;
end;
例 2.
--節選自在線代碼 simple.sql
DECLARE
V_counter? BINARY_INTEGER? := 1;
Begin
LOOP
Inert into temp_table
Values( v_counter, ‘loop index’ );
V_counter? := v_counter? + 1;
If v_counter > 50? then
Exit;
End if ;
End loop;
End;
例 3.
--節選自在線代碼 exitwhen.sql
DECLARE
V_counter? binary_index := 1;
Begin
Loop
Insert? into temp_table
Values ( v_counter,’ loop index ‘ );
Exit? when? v_counter > 50? ;
End loop;
End;
2.? WHILE 循環 /********While <> Loop? End Loop*******************While <> Loop? End Loop*******************
While 循環
While? <布爾表達式>? loop
要執行的語句;
end loop;
例1.
declare
x? number;
begin
x:= 1;
while? x<10? loop
dbms_output.put_line(to_char(x)||’還小于10’);
x:= x+1;
end loop;
end;
例 2.
--節選自在線代碼 while1.sql
DECLARE
V_counter? binary_integer? := 1;
Begin
While v_counter <= 50? loop
Inert? into temp_table
Values( v_counter, ‘loop index ‘) ;
V_counter? := v_counter + 1;
End loop;
End;
3.? 數字式循環
For 循環/****************************************For? 循環計數器? in? 下限 ..? 上限
For? 循環計數器? in? 下限 ..? 上限
loop
要執行的語句;
end loop;
FOR loop_counter? IN [ REVERSE ] low_bound? . . high_bound? LOOP
Sequence_of_statements;
END LOOP;
例1.
begin
for? I?? in?? 1??? ..?? 10??? loop
dbms_output.put_line(‘in=’||to_char(I));
end loop;
end;
例 2.
--節選自在線代碼 forscope.sql
DECLARE
V_counter? number := 7;
Begin
Inert? into temp_table? (num_col)
Values ( v_counter );
For? v_counter? IN 20 .. 30 loop
Insert? into temp_table (num_col )
Values ( v_counter );
End? loop;
Inert? into temp_table (num_col )
Values( v_counter );
End ;
注:*******************************************如果在for 中用 INVERSE 關鍵字,則循環索引將從最大向最小進行迭代.
§13.3? ***************標號和GOTO************標號和GOTO****************標號和GOTO
PL/SQL中GOTO語句是無條件跳轉到指定的標號去的意思。語法如下:
GOTO?? label;
. . .? . . .
<<label>>
例:
--節選自在線代碼 goto.sql
DECLARE
V_counter? BINARY_INTEGER := 1;
Begin
Loop
Inert? into temp_table
Values( v_counter,’loop count’ );
V_counter? := v_counter + 1;
If? v_counter > 50 then
Goto l_endofloop;
End? if;
End loop;
<<l_endofloop>>
insert? into? temp_table ( char_col )
values(‘Done !’);
End ;
§13.4? ***********NULL 語句 *******************NULL 語句 *****************NULL 語句
在 PL/SQL 程序中,null語可以用 null 語句來說明“不用做什么”的意思。如:
declare
. . .
begin
…
if( v_num is null then
goto print1;
end if;
…
<<print1>>
NULL;? -- 不需要處理任何數據。
End;
總結
以上是生活随笔為你收集整理的PL/SQL 处理流程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 有人知道祛痘可以到哪里去做吗
- 下一篇: 给我侄子取个名字