一、创建、执行过程
1.创建过程,操作代码为null
create procedure my_proc as
begin
null;
end my_proc;
/
2.如果创建的过程已经存在,那么使用create or replace语句
create or replace procedure my_proc as
begin
dbms_output.put_line(‘欢迎’);
end my_proc;
/
3.调用过程
set serverout on;
begin
my_proc;
end;
/
或者
exec my_proc;
4.创建一个用户,并授予执行过程权限
create user bush identified by bush;
grant connect,resource,execute on my_proc tobush;
5.连接bush并执行
conn bush/bush
exec lzm.my_proc;
二、使用参数
1.in参数
create table t(n number);
create or replace procedure insert_into_t(p_parmin number)
is
begin
insert into t values(p_parm);
end insert_into_t;
/
exec insert_into_t(p_parm=>100);
create or replace procedureinsert_into_t(p_parm1 innumber,p_parm2 in number)
is
begin
insert into t values(p_parm1);
insert into t values(p_parm2);
end insert_into_t;
/
execinsert_into_t(p_parm1=>101,p_parm2=>102);
或者 exec insert_into_t(101,102);
2.out参数
create or replace procedure emp_lookup(
p_empno in number,
o_ename out emp.ename%type,
o_sal out emp.sal%type
)
as
begin
selectename,sal into o_ename,o_sal from emp where empno=p_empno;
exceptionwhen no_data_found then o_ename:='null'; o_sal:=-1;
end emp_lookup;
variable name varchar2(10);
variable sal number;
exec emp_lookup('7782',:name,:sal);
print name;
print sal;
declare
l_ename emp.ename%type;
l_sal emp.sal%type;
begin
emp_lookup(7782,l_ename,l_sal);
dbms_output.put_line('ename='||l_ename);
dbms_output.put_line('sal='||l_sal);
end;
3.in out参数
create or replace procedure swap(
p_parm1 in outnumber,
p_parm2 in outnumber)
as
l_temp number;
begin
l_temp:=p_parm1;
p_parm1:=p_parm2;
p_parm2:=l_temp;
end swap;
declare
l_num1 number:=111;
l_num2 number:=222;
begin
dbms_output.put_line('交换前的变量值:');
dbms_output.put_line('l_num1='||l_num1);
dbms_output.put_line('l_num2='||l_num2);
swap(l_num1,l_num2);
dbms_output.put_line('交换后的变量值:');
dbms_output.put_line('l_num1='||l_num1);
dbms_output.put_line('l_num2='||l_num2);
end;
三、函数
create or replace function first_function
return varchar2
as
begin
return '欢迎';
end first_function;
/
declare
l_str varchar2(100):=null;
begin
l_str:=first_function;
dbms_output.put_line(l_str);
end;
create or replace procedure show_it(p_textvarchar2)
as
begin
dbms_output.put_line(p_text);
endshow_it;
/
exec show_it(first_function);