代码改变世界

PL/SQL 存储函数和过程

2016-12-12 17:11  甘雨路  阅读(332)  评论(0编辑  收藏  举报
--存储过程  
 1.不带参:
   create or replace procedure 存储过程名
as|is
--说明部分
begin
--执行的语句;
end;

调用存储过程

1 execute 存储过程名
   --exec 存储过程名


2  在另外的plsql语句中直接调用

begin  
   存储过程名;
   存储过程名;
   存储过程名;
endcreate or replace procedure p_dept
as
begin
  dbms_output.put_line('存储过程');
end;






2.带参的存储过程


create or replace procedure 存储过程名 (参数 in|out 参数类型)
as|is
--说明部分
begin
--执行的语句;
end--eg:
create or replace procedure p_dept1 (nuo in number)
as
--说明部分
v_english dept.english%type;
begin
--执行的语句;

--修改前的分数
select english into v_english from dept where id=nuo;
--修改后的分数
update dept set english=english+10 where id=nuo;
--打印
dbms_output.put_line('修改前分数为:'||v_english||'修改后的分数为'||(v_english+10));

end;
in和out的区别




--创建一个不带参的函数

create or replace function f_dept
--返回的是一个类型
return number
as
--说明部分
--定义一个变量来接收分数
v_english dept.english%type;

begin
  select english into v_english from dept where name1='杨雾';
  dbms_output.put_line(v_english);
  return v_english;
end;



--存储过程调用out方法实现返回多个值
create or replace procedure p_dept2 (nuo in number,
                                     v_name out varchar2,
                                     v_english out number,
                                     v_math out number)

as
--说明部分
begin
--执行的语句;

--修改前的分数
select name1,english,math into v_name,v_english,v_math from dept where id=nuo;

end;
-- 存储过程
create or replace procedure p_score
is v_math number;
begin 
  select math into v_math from scores where id=3;
  dbms_output.put_line(v_math);
end;


-- 带参储存过程
create procedure p_score2(digital in number)
as v_chinese number;
begin 
  select chinese into v_chinese from scores where id=digital;
  dbms_output.put_line(v_chinese);
end;


--存储过程调用out方法返回多个值
create or replace procedure 
p_score3(v_id in number,v_english out number,v_chinese out number)
as v_math number;
begin 
  select math,chinese,english into v_math,v_chinese,v_english from scores
  where id = v_id;
  dbms_output.put_line('Math:'||v_math||','||'Chinese:'||v_chinese||','||'English:'||v_english);
end;



-- 函数
create or replace function f_score
return number
as
v_english scores.english%type;
begin
  select english into v_english from scores where id = 5;
  return v_english;
end;
  
-- 带参函数
create or replace function f_score2(digital in number)
return scores.english%type
as
v_english number;
begin
  select english into v_english from scores where id = digital;
  return v_english;
end;