存儲(chǔ)過(guò)程是經(jīng)過(guò)語(yǔ)法檢查和編譯的SQL語(yǔ)句
創(chuàng)建過(guò)程時(shí)缸沃,系統(tǒng)會(huì)對(duì)其進(jìn)行編譯恰起,并將執(zhí)行代碼存儲(chǔ)到數(shù)據(jù)庫(kù)中。有名字趾牧,可接收參數(shù)检盼,沒(méi)有返回值。
創(chuàng)建時(shí)不執(zhí)行翘单,調(diào)用時(shí)才執(zhí)行吨枉。
1.在SQL>提示符下調(diào)用過(guò)程,execute 過(guò)程名(參數(shù) ...)
2.在PL/SQL塊中調(diào)用過(guò)程哄芜,過(guò)程名(參數(shù) …)貌亭,可獨(dú)立作為PL/SQL語(yǔ)句
可以在匿名塊、其他的存儲(chǔ)過(guò)程认臊、函數(shù)中調(diào)用圃庭。
存儲(chǔ)過(guò)程中可以直接執(zhí)行DML語(yǔ)句(select、insert失晴、update剧腻、delete),不能直接執(zhí)行DDL語(yǔ)句师坎。
存儲(chǔ)過(guò)程中如需執(zhí)行DDL語(yǔ)句恕酸,先把DDL語(yǔ)句存放在一個(gè)字符串變量中,然后通過(guò)execute immediate語(yǔ)句執(zhí)行字符串內(nèi)容胯陋,字符串內(nèi)容必須符合SQL語(yǔ)法蕊温。用戶從角色中獲取的權(quán)限袱箱,在PL/SQL塊中
存儲(chǔ)過(guò)程中創(chuàng)建觸發(fā)器實(shí)現(xiàn)主鍵自增長(zhǎng):
create or replace procedure pk_auto_increment_pro(t_name varchar2) is
v_ddl varchar2(2000);
begin
v_ddl := 'create or replace trigger pk_auto_increment_' || t_name ||
' before insert on ' || t_name ||
' for each row
begin
dbms_output.put_line(''賦值前id:'' ||:new.id);
select test_seq.nextval into :new.id from dual;
dbms_output.put_line(''賦值后id:'' ||:new.id);
end;';
execute immediate v_ddl;
end;
create [or replace] procedure 過(guò)程名 [(參數(shù)名 參數(shù)模式 參數(shù)類型,...)] is|as
[declaration] --定義部分
begin
--執(zhí)行部分
[exception]
--異常處理部分
end [過(guò)程名];