一、存储过程定义:
语法 :
Create [or replace] procedure proc_name
[(para_name [in | out | in out] type
para_name [in | out | in out] type
[,…..])]
is | as
声明部分
变量 1 INTEGER :=0;
变量 2 DATE;
BEGIN
执行部分 ;
EXCEPTION
异常处理部分
end proc_name;
说明 :
u 每个参数写法:参数名,属性,类型
u Create [or replace] 》》》》如果存在就替换, 不存在就创建。
u 命名规范: pro_myname
例子:
create or replace procedure pro_emp (v_no in emp.empno%type ,v_name out emp.ename%type ,v_sal out emp.sal%type )
is
e_sal_error exception ;
begin
select ename,sal into v_name,v_sal from emp
where empno=v_no;
if v_sal> 2500 then
dbms_output.put_line( 'soijdiofj' ||v_sal);
raise e_sal_error;
end if ;
exception
when no_data_found then
dbms_output.put_line( 'no_data_found >>>' ||v_no);
when e_sal_error then
dbms_output.put_line( 'e_sal_error>>>>>' );
end pro_emp;
二、执行存储过程
-- 在 pl/sql 中
declare
v_a1 emp.ename%type;
v_a2 emp.sal%type;
begin
--这里采取名称表示法(区别于位置表示法)
query_emp(v_no=>5678,v_name=>v_a1,v_sal=>v_a2);
end;
declare
v_name emp.ename%type ;
v_sal emp.job%type ;
v_no emp.empno%type ;
begin
--22222 pro_emp(7698,v_name,v_sal);
---33333 pro_emp(v_no=> 7698 ,v_sal=>v_sal,v_name=>v_name);
dbms_output.put_line( 'Ãû×Ö£º' ||v_name);
end ;
说明:省略符号“ => ” , 那么参数顺序和定义一致,不省略的话,可以随便一个顺序。
三、查看
Select text from user_source where name='QUERY_EMP';
select text from user_source where name='PRO_EMP';
注意:存储过程名称要大写
四、删除
-- 删除存储过程
Drop procedure query_emp;