一、簡介
pl/sql可以一次性發(fā)送多條sql語句到數(shù)據(jù)庫,同時具有變量,流程控制,是結(jié)構(gòu)化與過程化的結(jié)合體。
1.語法結(jié)構(gòu)
declare
--聲明部分:定義變量,常量,游標
begin
--程序編寫,sql語句(執(zhí)行部分)
exception
--處理異常
end;
2.第一個塊
declare
v_num NUMBER :=10;
BEGIN
DBMS_OUTPUT.PUT_LINE('This string breaks
here.'||V_NUM);
END;
注意:默認情況下DBMS_OUTPUT.PUT_LINE無法使用,需要設(shè)置set serveroutput on;
3.定義鍵盤輸入
declare
v_num NUMBER :=10;
BEGIN
v_num:=&v_num;
DBMS_OUTPUT.PUT_LINE('This string breaks
here.'||V_NUM);
END;
4.查詢數(shù)據(jù)字典所有關(guān)鍵字
select *from v$reserved_words;
5.聲明變量語法
變量名稱[constant] 類型 [not null] [:=value]
注意:pl/sql中變量名不區(qū)分大小寫。
6.使用%type聲明變量(變量與表中某列類型一樣)
DECLARE
v_eno emp.empno%TYPE ; -- 與empno類型相同
v_ename emp.ename%TYPE ; -- 與ename類型相同
BEGIN
DBMS_OUTPUT.put_line('請輸入雇員編號:') ;
v_eno := &empno ; -- 由鍵盤輸入雇員編號
SELECT ename INTO v_ename FROM emp WHERE empno= v_eno ;
DBMS_OUTPUT.put_line('編號為:' || v_eno || '雇員的名字為:'|| v_ename) ;
END ;
7.%rowtype(標記一行記錄類型)
DECLARE
emprow emp%ROWTYPE;
BEGIN
SELECT * INTO emprow FROM emp WHERE empno= 7369 ;
DBMS_OUTPUT.put_line('編號為:' || emprow.empno || '雇員的名字為:'|| emprow.ename) ;
END ;
二、運算符
1.賦值運算符(變量:=表達式;)
2.連接運算符(||)
3.關(guān)系運算符(判斷兩個操作數(shù)據(jù)的大小,返回值為true或者false,如果有一個為null,最終結(jié)果也為null)
關(guān)系運算符:>,<,>=,<=,!=,<>
判斷null:is null ,is not null
范圍查詢:between and
范圍查詢:in
模糊查詢:like
4.邏輯運算符(and or not)
三、標量類型
1.數(shù)值型
2.字符型
3.日期型
4.大對象型
5.布爾型
四、程序結(jié)構(gòu)
1.分支結(jié)構(gòu)
如:
if condition then
meet the condition;
end if;
if condition then
meet the condition;
else
not meet the condition
end if ;
if condition then
meet the condition;
elseif condition then
meet the condition
...
else
not meet the condition ;
end if;
注意:condition 可以使用regexp_like()函數(shù)正則驗。也可以使用case when代替if語句。
2.循環(huán)結(jié)構(gòu)
2.1.loop循環(huán)
loop
loop excute block;
exit when loop end condtion;
loop end condition alter;
end loop;
while(condition) loop
loop excute block;
loop end condition alter;
end loop;
例如
DECLARE
v_i NUMBER := 1 ; -- 定義一個變量,用于循環(huán)
BEGIN
LOOP
DBMS_OUTPUT.put_line('v_i = ' || v_i) ;
EXIT WHEN v_i >= 3 ;
v_i := v_i + 1 ;
END LOOP ;
END ;
2.2.for循環(huán)
for loop_index in[reverse] start...end Loop
loop block;
end loop;
例如:
v_i NUMBER := 1 ; -- 定義一個變量,用于循環(huán)
BEGIN
FOR v_i IN 1 .. 3 LOOP
DBMS_OUTPUT.put_line('v_i = ' || v_i) ;
END LOOP ;
END ;
降序:
DECLARE
v_i NUMBER := 1 ; -- 定義一個變量,用于循環(huán)
BEGIN
FOR v_i IN REVERSE 1 .. 3 LOOP
DBMS_OUTPUT.put_line('v_i = ' || v_i) ;
END LOOP ;
END ;
注意:循環(huán)控制exit(退出循環(huán)),continue(退出本次循環(huán))
五.內(nèi)部程序塊
六.異常處理