--无参的存储过程
create or replace procedure proc_one
as
v_emp emp%rowtype;
begin
select * into v_emp from emp where empno=7788;
dbms_output.put_line(v_emp.ename||' '||v_emp.sal);
end;
--在pl/sql developer command窗口查看过程编译错误
/
show errors;
/
--调用过程授权
grant execute on proc_one to px; --授予执行权给px用户
grant execute on proc_one to public;--授予所有用户
--调用存储过程
SQL> set serveroutput on; --设置输出
SQL> exec scott.proc_one;
SQL> exec scott.proc_one();
--PL/SQL代码块方式调用
begin
proc_one();
end;
--Oracle存储过程参数形式有:
--in 默认形式 可以省略in 可以指定默认值
--out 输出参数
--in out 输入输出参数
--带输入参数的存储过程
create or replace procedure proc_two
(v_no in number:=7788) --参数不需要指定长度并可以指定默认值 可以省略in
as
v_emp emp%rowtype;
begin
select * into v_emp from emp where empno=v_no;
dbms_output.put_line(v_emp.ename||' '||v_emp.sal);
exception
when no_data_found then
dbms_output.put_line('没有找到数据');
end;
--带输出参数的存储过程
create or replace procedure proc_three
(v_no in dept.deptno%type:=10,
out_deptname out dept.dname%type)
is
begin
select dname into out_deptname from dept where deptno=v_no;
end;
--调用
declare
v_dname dept.dname%type;
v_dno dept.deptno%type;
begin
v_dno:='&部门编号';
--proc_three(v_dno,v_dname);
proc_three(out_deptname=>v_dname,v_no=>v_dno);
--通过指定名称传递实参,这样可以不按位置顺序
dbms_output.put_line('编号为'||v_dno||'的部门名称:'||v_dname);
end;
--带输入输出参数的存储过程
create or replace procedure proc_four
(v_a in out number,v_b in out number)
as
v_temp number;
begin
v_temp:=v_a;
v_a:=v_b;
v_b:=v_temp;
end;
--调用
declare
n number:=100;
m number:=200;
begin
dbms_output.put_line('交换前--n:'||n||' m:'||m);
proc_four(n,m);
dbms_output.put_line('交换后--n:'||n||' m:'||m);
end;
Oracle存储过程
最新推荐文章于 2024-03-22 17:42:06 发布