oracle过程和函数

一、创建、执行过程

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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值