/*不带任何参数存储过程*/
create or replace procedure out_date is
begin
dbms_output.put_line(sysdate);
end out_date;
--测试
SQL> set serveroutput on;
SQL> exec out_date;
/*带IN和out参数的存储过程*/
create or replace procedure get_name(v_id in number, v_name out varchar2) as
begin
select name into v_name from employee where id = v_id;
exception
when no_data_found then
raise_application_error(-20001, '你输入的ID不存在!');
end get_name;
--测试
SQL> var v_name varchar2(20);
SQL> exec get_name(4,:v_name);
PL/SQL 过程已成功完成。
SQL> print v_name;
V_NAME
--------------------------------
4
附:
为参数传递变量和数据位置传递,名称传递,组合传递三种
1.位置传递:在调用子程序时按照参数定义的顺序为参数指定相应的变量或数值
exec add_dept(40,'sales','new york');
exec add_dept(10);
2.名称传递:在调用子程序时指定参数名,并使用关联符号=>为其提供相应的数值或变量
exec add_dept(dname=>'sales',dno=>50);
exec add_dept(dno=>30);
3.组合传递:同时使用位置传递和名称传递
exec add_dept(50,loc=>'new york');
exec add_dept(60,dname=>'sales',loc=>'new york');
查看过程原代码
oracle会将过程名,源代码以及其执行代码存放到数据字典中.执行时直接按照其执行代码执行可查询数据字典(user_source)
select text from user_source where name='get_name';
删除过程
drop procedure get_name;