建表、插值的procedure
create or replace procedure CREATE_EMP is v_createsql varchar2(2000); v_insertsql varchar2(2000); begin v_createsql := 'create table EMP ( employerid number(8) primary key not null, employername varchar2(20) not null)'; v_insertsql := 'insert into EMP select 10000000,'||chr(39)||'Philippe'||chr(39)||' from dual'; execute immediate v_createsql; execute immediate v_insertsql; end;
注意,這里字符串中的單引號可以用chr(39)表示,另外oracle字符串拼接用||
一個簡單的procedure:
create or replace procedure EMP_COUNT AS V_TOTAL NUMBER(10); begin select count(*) into V_TOTAL from EMP; Dbms_Output.put_line('雇佣總人數為: ' || V_TOTAL) ; end;
執行procedure:
sql窗口中:
begin EMP_COUNT; end;
另外補充一下procedure和function的區別:
https://stackoverflow.com/questions/25419629/functions-vs-procedures-in-oracle
1、Oracle函數必須返回一個值,而存儲過程獲取返回值需要通過out,in out參數。
2、普通的sql語句可以直接調用函數,但是無法使用存儲過程。
3、function只能返回一個值,但是存儲過程可以不返回,返回一個或者返回多個。
4、函數一般用來計算,而存儲過程一般用來執行業務邏輯。