当前位置: 代码迷 >> SQL >> 【PLSQL】进程procedure的形参和实参
  详细解决方案

【PLSQL】进程procedure的形参和实参

热度:79   发布时间:2016-05-05 10:42:51.0
【PLSQL】过程procedure的形参和实参

************************************************************************  ****原文:blog.csdn.net/clark_xu 徐长亮的专栏************************************************************************

1.1 过程procedure

语法:    

         create or replace procedure proc_name

[(arg_name{in | out | in out} type, …)

]

{is | as }

          <local variable declareation>

         begin

                   <executable statements>

         exception

                   <exception handlers>

         end;

        

创建存储过程例子:

         create or replace procedure account_number

         ls

          v_cnt binary_interger;

         begin

          select count(id) into v_cnt from account;

          dbms_output.put_line(‘account number is’ || v_cnt);

         end;

1.1.1  调用存储过程

sql工作表中直接调用:

         exec account_number;

1.1.2  存储过程的参数

例如:

         create or replace procedure proc1

         (p_c1 varchar2,p_c2 out varchar2,p_c3 in out varchar2)

         ls

          v_c1 varchar(10);

         begin

      --p_c1 :=p_c1 || ‘d’; --不能做复制的目标

                   v_c1:=P_c1;

                   p_c2 :=p_c1 || ‘d’;

                   p_c3”=p_c3||’d’;

         end;

调用为:

         exec  proc1 (‘abc’,’abc’,’abc’);保存

调用:

         declare

                   v_c2 varchar2(10) :=’abc’

                   v_c33 varchar2(20) :=’abc’;

         begin

                   proc1(‘abc’,v_c2,v_c3);

                   dbms_output.put_line(v_c2);

                   dbms_outpurt.put_line(v_c3);

         end;

        

1.1.3  形参和实参

创建存储过程中的参数为形参:

         create or replace procedure proc1

         (p_c1 varchar2,p_c2 out varchar2,p_c3 in out varchar2)

         ls

          v_c1 varchar(10);

         v_c1为过程中的局部变量

调用时候括号内的参数为实参

         proc1(‘abc’,v_c2,v_c3);

形参的种类:

         in: 缺省模式,在过程的内部形参是只读的;

         out;过程内部,形参可以读可以写入;调用过程中,任何的实参将被忽略,即值不会赋给形参;过程执行完成后,当前值赋给对应的实参;

         in out:调用过程中,实参的值赋给对应的形参,过程内部,可以读,可以写;过程执行结束后,控制返回给控制环境,形参内存赋给调用时候的实参;

对实参的要求:

         模式为In的形参对应的实参,可以是常量和变量

         某省为IN outOUT的形参对应的实际参数必须是变量;用于存储返回的值;

形参的限制:

形参不能声明长度,但是可以使用%TYPE来进行限制

3.1.4 带参数的过程调用

位置表示法:

         --调用的添加所有参数,实参和形参按照顺序一一对应

名字表示法:

         --调用时给出形参名字,并给出实参,例如

         procname(12,p_outparm +> v_var1,p_inout =) 10)

两种方法可以混合用:

         混用的时候,第一个参数必须按照位置类指定;

         当参数很多的时候,提供程序可读性,用名字表示法;

3.1.5使用缺省参数

形参可以指明缺省值

         parm_name [mode] type {:=|default} int_value;

位置指示法是,所有缺省的值都放在最后面;

声明时,如果有缺省值,尽量将缺省值放在参数表的末尾;

3.1.6 存储过程的DDL语句

在过程中执行DDL操作,所需的权限必须通过直接授予的方式,不能通过角色授予;

调用过程时候,所有角色都是disable的,即角色所包含的所有权限都不能生效;

调用其他用户的过程,必须有过程的属主赋予执行权限

         grant execut on procname to userame;

         create procedure proc1

         ls

         begin

          execute immediate ‘create table test100(c1 number)’;

end;

************************************************************************  ****原文:blog.csdn.net/clark_xu 徐长亮的专栏************************************************************************
  相关解决方案