3--存储过程+函数

子程序:命名的pl/sql块,编译并保存在数据库中
两种:
存储过程(可执行DML操作在需要对数据进行操作的时候使用,方法不推荐执行)
函数(方法)


存储过程:
create or replace procedure 过程名称[参数列表]
is(或as)
--声明变量
begin
--执行代码
--异常处理
end;

案例:创建一个存储过程,往学生表插入1000条数据
1)无参
create or replace procedure pro_add_student
is
begin
for v_i in 1..1000 loop
insert into t_student (sid,sname,sage)values(seq_t_student.nextval,'王五'||v_i,v_i);
end loop;
commit;
end;

调用
1.保存在procedures,右键选中存储过程,有测试功能,
2.在pl/sql块中调用

begin
pro_add_student;
end;

begin
pro_add_student();--在调用存储过程的时候,如果没有参数,括号可以省略
end;

2)有参过程
create or replace procedure pro_test(
p_name varchar2,
p_ssex varchar2,
p_age number
)is
begin
dbms_output.put_line(p_name||' 'p_ssex||' '||p_sage);
end;

调用:通过pl/sql块

declare
v_name varchar2(20):='a';
v_ssex varchar2(20):='a';
v_sage number(5):=34;
begin
pro_test(v_name,v_ssex,v_age);
end;

参数的三种类型:
IN 默认情况下IN接收参数
OUT 保存需要返回的信息
IN OUT 不但接收参数,而且保存返回的信息


(1)create or replace procedure pro_test_1(
p_name in varchar2,
p_ssex in varchar2,
p_age in number,
p_res out varchar2,
)is
begin
--p_name:='test';
p_res:='存储返回的信息';
dbms_output.put_line(p_name||' 'p_ssex||' '||p_sage);
end;

(2)declare
v_name varchar2(20):='a';
v_ssex varchar2(20):='a';
v_sage number(5):=34;
v_res varchar2(30);
begin
pro_test_1(v_name,v_ssex,v_age,v_res);
dbms_output.put_line(v_res);
end;

案例;创建存储过程,根据商品名称查询相关信息,并把结果返回打印出来。

create or replace procedure pro_test_2(
p_name in varchar2,
p_out out sys_refcursor --过程指定sql,于此同时,将游标储存的信息返回


)is
p_sql varchar2(200);

begin
p_sql:='select * from mc where 1=1';
if p_name is not null then --and maname like '%商品名称%'
p_sql:=p_sql ||'and maname like ''%'||p_name||'%'' ';-- ''转义字符单引号
end if;
--dbms_output.put_line(p_sql);

open p_out for p-sql;
end;


调用 游标对象的取出

declare
v_out sys_refcursor;
v_mc mc%rowtype;
begin
pro_test_2('佳能',v_out);
loop
fetch v_out into v_mc;
exit when v_out%notfound;
dbms_output.put_line(v_mc.mcid||' '||v_mc.maname||' '||v_mc.mcdecx);
end loop;
close v_out;
end;



函数

create or replace function 方法名称[参数列表]
return 返回类型
is(或as)


begin
end;

案例:创建一个函数,返回一个名称
create or replace function fun_get_name
return varchar2
is
begin
return '返回的数据';
end;


调用 1.保存在Functions,右键选中测试
2.pl/sql快调用

begin
dbms_output.put_line(fun_get_name);
end;


3.通过select语句

select fun_get_name from dual;

有参的函数

create or replace function fun_get_name(
v_id number

return varchar2
is
v_out varchar2(20);
begin
select maname into v_out from mc where mcid = v_id;
return '返回的数据:'||v_out;
end;

调用
select mcid from mc;
select mcid,fun_get_name(mcid) from mc;



参数的三种类型,in out in out





相关主题
相关文档
最新文档