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 ;

相关内容