oracle 存储过程的参数懂得

oracle 存储过程的参数理解

-- 输出参数不可以修改 解决的方法有两种
   --1 把参数改成 输入参数  
   --2 就是参数改成 可输入输出的参数;
  调用过程的 三个方式
        1 就是使用call
             在只用call方式调用函数的时候,必须加要括号,有参数,还要加参数值
             这个方式在命令窗口,调用过程,将不会出现输入的数据.
        2 就是使用exec 命令,进行命令调用过程, 使用命令,就必须在命令行里面输入
          过程名,这个命令窗口中,可加可不加() ,如果有参数的,就一定要加,还有参数值,参数值的类型要与
          变量类型相同.
        3 在语句块中进行调用过程,这个方式和命令模式类似,他们都是可要可不要(),
        -- 在2 和 3 中的 没有括号的情况是,过程没有参数 ,如果有,就必须要有()

       
                             
   输出参数的特点
        1  一个过程中,如果有输出参数(OUT 参数),在调用过程的使用,也要传入一个参数, 这个参数可以不用在调用的地方
        进行赋值,就直接传入一个声明好的一个变量,用来接受存储过程中的输出参数的值(OUT 参数)
        2  输入参数 值不可以改变在过程中,

       
           注意: 在存储过程中,他的参数类型不可以设置它的大小 ;    
               例如;
                           CREATE OR REPLACE PROCEDURE hello(
                               p_name IN VARCHAR2(12),
                                  p_age OUT NUMBER(10,2)
                                )
                               IS
                              BEGIN           
        如果有输出参数就必须有有一个参数进行接收 ;

       
     CREATE OR REPLACE PROCEDURE hello(
            p_name IN VARCHAR2,
            p_age OUT emp.sal%TYPE 
     )
     IS
     BEGIN
       SELECT emp.sal + 3131 INTO p_age FROM emp WHERE empno = 7788 ;
                       
            dbms_output.put_line( p_age);
     END ;
     ---------  块中调用方法
     DECLARE
         v_nanme  varchar2(12);
         v_age NUMBER (12,2);
     BEGIN
          hello (v_nanme,v_age);
            dbms_output.put_line(v_age);
     END  ;
    
     -- 在这个过程中 传入的v_age 就是接受 存储过程输出参数的值 ;  类似于Java的中的返回值

     -- 理解 in out 参数
    
     CREATE OR REPLACE PROCEDURE hello1 (
            p_name IN OUT emp.ename%TYPE
     )
     IS
    
     BEGIN
          --  SELECT emp.ename INTO p_name FROM emp ;
              p_name:='a;sk , ' || p_name ;
           END ;

    --------------------------------------
      DECLARE
         v_nanme  varchar2(12);
     BEGIN       
         v_nanme:='12312';
          hello1(v_nanme);
            dbms_output.put_line(v_nanme);
     END  ;
    
    
SELECT emp.sal FROM emp WHERE emp.empno = 7788 ;
 
 


我的异常网推荐解决方案:oracle存储过程,http://www..net/oracle-develop/177537.html