存储过程:
语法:
create [or replace] procedure 存储过程名[(参数 in|out|in out 参数数据类型,...)]
is | as
声名部分;
begin
plsql代码块;
exception
异常处理;
end;
--无参数存储过程
create or replace procedure p1
is
begin
for v in (select * from emp) loop dbms_output.put_line(v.ename||','||v.job||','||v.sal||','||v.deptno);
end loop;
end;
select * from user_objects where object_type='PROCEDURE';
存储过程的调用:
- 在plsql块中调用
直接写名字
- call命令调用
call p();
- execute命令调用
控制台执行,不打印结果需要运行set serveroutput on;
删除存储过程:
drop procedure p1;
存储过程参数模式:
IN 用于接受调用程序的值。默认的参数模式
OUT 用于向调用程序返回值
IN OUT 用于接受调用程序的值,并向调用程序返回更新的值
--写一个存储过程,根据传入部门编号,查询该部门下的所有员工,并打印员工信息
create or replace procedure p1(v_deptno in number)
is
begin
for v in (select * from emp where deptno=v_deptno) loop
dbms_output.put_line(v.ename||','||v.job||','||v.sal||','||v.deptno);
end loop;
end;
--根据传入的员工编号,查询出员工信息并以输出参数的方式返回
create or replace procedure p2(v_empno in number,v_emp out emp%rowtype)
is
begin
select * into v_emp from emp where empno=v_empno;
end;
declare
v emp%rowtype;
begin
p2(7369,v);
dbms_output.put_line(v.empno||','||v.ename||','||v.job||','||v.deptno);
end;
函数:
语法:
create [or replace] function 函数名称[(形式参数 参数类型,...)]
return 返回值类型
is
声名变量;
begin
plsql代码块;
return 返回值;
end;
create or replace function f1
return varchar2
is
begin
return 'hello';
end;
访问函数的方式:
使用 SQL 语句
select f1 from dual;
使用 PL/SQL 块
declare
v varchar2(30);
begin
v:=f1;
dbms_output.put_line(v);
end;
--求二个数的和
create or replace function f1(n number,n2 number)
return number
is
begin
return n + n2;
end;
--求一个数的阶乘
create or replace function f1(n number)
return number
is
--声名一个变量保存返回值
res number(10):=1;
begin
for i in 1..n loop
res:=res*i;
end loop;
return res;
end;