Oracle之儲存過程

2021-09-01 00:13:31 字數 2874 閱讀 8885

–1

–建立儲存過程,包括3部分,宣告,執行,異常處理

建立儲存過程不需要使用declare關鍵字,而是使用create

or replace關鍵字

in模式引數

create or replace procedure pro_insertdept is

begin

insert into dept values(77,'市場拓展部','jilin');

commit;

dbms_output.put_line('插入成功!');

end;

/

–out:輸出型別的引數

create or replace procedure select_dept(

num_deptno in number,

var_dname out dept.dname%type,

var_loc out dept.loc%type

)isbegin

select dname,loc into var_dname,var_loc

from dept

where deptno=num_deptno;

expection

when no_data_found then

dbms_output.put_line('666');

end select_dept;

/

–使用pl/sql塊呼叫out模式的儲存過程

set serverout on;

declare

var_dname dept.dname%type;

var_loc dept.loc%type;

begin

select_dept(99,var_dname,var_loc);

dbms_output.put_line(var_dname||var_loc);

end;

/

–使用exec命令執行out模式的儲存過程

–需要用variable關鍵字宣告兩個變數,用以儲存out引數

variable var_dname varchar2(50);

variable var_loc varchar2(50);

exec select_dept(15,:var_dname,:var_loc);

–此時看不到值,可用print命令列印輸出值

print var_dname var_loc;
–使用select語句輸出

select :var_dname,:var_loc

from dual;

若宣告了out模式的引數,則在執行儲存過程時,

必須為out引數提供變數,以便接收out引數的返回值

否則,程式執行後將會出現錯誤。

–in out模式

create or replace procedure pro_square(

num in out number,

flag in boolean)is

i int:=2;

begin

if flag then

num:=power(num,i);

else

num:=sqrt(num);

end if;

end;

/

–呼叫儲存過程pro_square

set serverout on;

declare

var_number in number;

var_temp number;

boo_flag boolean;

begin

var_temp:=3;

var_number:=var_temp;

boo_flag:=false;

pro_square(var_number,boo_flag);

if boo_flag then

dbms_output.put_line(var_temp||'的平方為:'||var_number);

else

dbms_output.put_line(var_temp||'平方根為:'||var_number);

end if;

end;

/

in引數的預設值

create or replace procedure insert_dept(

num_deptno in number,

var_dname in varchar2 default '綜合樓',

var_loc in varchar2 default '北京')is

begin

insert into dept values(num_deptno,var_dname,var_loc);

end;

/

–呼叫該儲存過程

declare

row_dept dept%rowtype;

begin

insert_dept(57,var_loc=>'太遠');

commit;

select * into row_dept from dept where deptno=57;

dbms_output.put_line('');

end;

/

Oracle學習之儲存過程

儲存過程可以說是乙個記錄集吧,它是由一些t sql語句組成的 塊,這些t sql語句 像乙個方法一樣實現一些功能 對單錶或多表的增刪改查 然後再給這個 塊取乙個名字,在用到這個功能的時候呼叫他就行了 建立儲存過程 create proc edure procedure name number var...

Oracle 之儲存過程(二)

一 有輸入輸出引數的儲存過程 根據員工號,查詢並返回該員工的年薪,姓名,獎金 create or replace function fun get annuasal by empno2 p empno emp.empno type,p ename out emp.ename type,p com o...

oracle學習筆記之儲存過程

user scott sql create table mytest name varchar2 30 password varchar2 30 table created sql create or replace procedure pro sp1 is 建立乙個簡單的儲存過程 2 begin ...