Oracle 預存程序的參數理解

來源:互聯網
上載者:User

-- 輸出參數不可以修改 解決的方法有兩種
   --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 ;

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.