--1、简单的存储过程
create or replace procedure procedure_test
(p_id in varchar,p_status out varchar) --p_id为输入参数 ,p_status为输出参数
as
t_name varchar2(20);
t_count number:=0;
begin
select votetitle,vatesum into t_name,t_count from votemaster where id=p_id; --注意:此处没有:来赋值
if t_count <=0 then
p_status:= t_name||':差';
elsif t_count >0 and t_count <3 then
p_status:= t_name||':良好';
else
p_status:= t_name||':优秀';
end if;
end;
--执行
declare
out_param varchar2(50);
begin
procedure_test('1',out_param);
dbms_output.put_line(out_param);
end;
--2、带游标的存储过程
create or replace procedure procedure_cursor_test
(p_id in varchar2,p_status out varchar2)
as
vote votemaster%rowtype; --声明一个对象(votemaster)类型的对象
cursor my_cur is select * from votemaster; --声明一个游标并填充数据
begin
open my_cur; --打开游标
loop
fetch my_cur into vote ; --循环游标,并放入对象
exit when my_cur%notfound; --如果没有数据,则直接exit
if vote.id=p_id then
p_status := vote.votetitle||':'||vote.vatesum;
--如果想终止循环,可以直接exit;
end if;
end loop;
close my_cur; --关闭游标
end;
--执行
declare
out_param varchar2(50);
begin
procedure_cursor_test('1',out_param);
dbms_output.put_line(out_param);
end;
--包定义
create or replace package t_package
is
--定义过程
procedure append_proc(t varchar2,a out varchar2);
--过程的重载
procedure append_proc(t number,a out varchar2);
--定义函数
function append_fun(t varchar2) return varchar2;
end;
--包主题
create or replace package body t_package
is
v_t varchar2(30);
--私有成员函数
function private_fun(t varchar2) return varchar2 is
begin
v_t := t||'hello';
return v_t;
end;
--实现过程
procedure append_proc(t varchar2,a out varchar2) is
begin
a := t||'hello';
end;
--过程的重载
procedure append_proc(t number,a out varchar2) is
begin
a := t||'hello';
end;
--实现函数
function append_fun(t varchar2)
return varchar2 is
begin
v_t := t||'hello';
return v_t;
end;
end;