<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-124  評(píng)論-49  文章-56  trackbacks-0
    --例1
    declare
    v_name 
    varchar2(10);
    begin 
     
    select user_name into v_name from tb_rd_user_info where user_name='ywj12';
     dbms_output.put_line(
    'name:'||v_name);
    exception
     
    when no_data_found then
     dbms_output.put_line(
    'error name');
    end;

    --匿名塊
    --
      沒有名稱的pl/sql塊,如例1
    --
    命名塊
    --
    子程序
    --
      (1)過程
    --
         建立過程時(shí)可以指定輸入?yún)?shù)(in),輸出參數(shù)(out)
    create or replace procedure update_money(uname varchar2,num number)
    is
    begin
    update tb_rd_user_info set game_money = num 
    where user_name = uname;
    end update_money;
    --     刪除
    drop   procedure   update_money;
    --     調(diào)用
    exec update_money('ywj123',100000);
    call update_money(
    'ywj123',100000);
    --     重新編譯
    alter procedure update_money compile;
    --     授權(quán)student用戶使用該過程
    grant execute on update_money to student;  
    --  (2)函數(shù)
    --
         創(chuàng)建
    create or replace function get_user_id(uname varchar2)
    return number is
      uid 
    number;
    begin
     
    select user_id into uid from tb_rd_user_info 
     
    where user_name=uname;
     
    return uid;
    end;
    --     調(diào)用
    var rs number
    call get_user_id(
    'ywj123'into :rs;
    --     刪除
    drop function get_user_id;
    --     重新編譯
    alter function get_user_id compile;
    --  (3)包
    --
         創(chuàng)建(包由包規(guī)范和包體兩部分組成)
    --
           包規(guī)范
    create package emp_pkg is
      
    procedure update_money (uname varchar2,num number);
      
    function get_user_id(uname varchar2return number;
    end;
    --       包體
    create package body emp_pkg is
      
    procedure update_money(uname varchar2,num number)
      
    is
      
    begin
        
    update tb_rd_user_info set game_money = num 
        
    where user_name = uname;
      
    end update_money;
      
      
    function get_user_id(uname varchar2)
      
    return number is
        uid 
    number;
      
    begin
        
    select user_id into uid from tb_rd_user_info 
        
    where user_name=uname;
        
    return uid;
      
    end;
    end;
    --     調(diào)用
    call emp_pkg.update_money('ywj123',100000);
    var rs number
    call emp_pkg.get_user_id(
    'ywj123'into :rs;

    --解發(fā)器

    存儲(chǔ)過程參數(shù)傳遞

    參數(shù)的作用是向存儲(chǔ)過程傳遞數(shù)據(jù),或從存儲(chǔ)過程獲得返回結(jié)果。正確的使用參數(shù)可以大大增加存儲(chǔ)過程的靈活性和通用性。
    參數(shù)的類型有三種,如下所示。

    參數(shù)的定義形式和作用如下:
    參數(shù)名 IN 數(shù)據(jù)類型 DEFAULT 值;
    定義一個(gè)輸入?yún)?shù)變量,用于傳遞參數(shù)給存儲(chǔ)過程。在調(diào)用存儲(chǔ)過程時(shí),主程序的實(shí)際參數(shù)可以是常量、有值變量或表達(dá)式等。DEFAULT 關(guān)鍵字為可選項(xiàng),用來設(shè)定參數(shù)的默認(rèn)值。如果在調(diào)用存儲(chǔ)過程時(shí)不指明參數(shù),則參數(shù)變量取默認(rèn)值。在存儲(chǔ)過程中,輸入變量接收主程序傳遞的值,但不能對(duì)其進(jìn)行賦值。
    參數(shù)名 OUT 數(shù)據(jù)類型;
    定義一個(gè)輸出參數(shù)變量,用于從存儲(chǔ)過程獲取數(shù)據(jù),即變量從存儲(chǔ)過程中返回值給主程序。
    在調(diào)用存儲(chǔ)過程時(shí),主程序的實(shí)際參數(shù)只能是一個(gè)變量,而不能是常量或表達(dá)式。在存儲(chǔ)過程中,參數(shù)變量只能被賦值而不能將其用于賦值,在存儲(chǔ)過程中必須給輸出變量至少賦值一次。
    參數(shù)名 IN OUT 數(shù)據(jù)類型 DEFAULT 值;
    定義一個(gè)輸入、輸出參數(shù)變量,兼有以上兩者的功能。在調(diào)用存儲(chǔ)過程時(shí),主程序的實(shí)際參數(shù)只能是一個(gè)變量,而不能是常量或表達(dá)式。DEFAULT 關(guān)鍵字為可選項(xiàng),用來設(shè)定參數(shù)的默認(rèn)值。在存儲(chǔ)過程中,變量接收主程序傳遞的值,同時(shí)可以參加賦值運(yùn)算,也可以對(duì)其進(jìn)行賦值。在存儲(chǔ)過程中必須給變量至少賦值一次。
    如果省略IN、OUT或IN OUT,則默認(rèn)模式是IN。 
    CREATE OR REPLACE PROCEDURE CHANGE_SALARY(P_EMPNO IN NUMBER DEFAULT 7788,P_RAISE NUMBER DEFAULT 10)
            
    AS
             V_ENAME 
    VARCHAR2(10);
    V_SAL 
    NUMBER(5);
            
    BEGIN
             
    SELECT ENAME,SAL INTO V_ENAME,V_SAL FROM EMP WHERE EMPNO=P_EMPNO;
             
    UPDATE EMP SET SAL=SAL+P_RAISE WHERE EMPNO=P_EMPNO;
             DBMS_OUTPUT.PUT_LINE(
    '雇員'||V_ENAME||'的工資被改為'||TO_CHAR(V_SAL+P_RAISE));
    COMMIT;
            EXCEPTION
             
    WHEN OTHERS THEN
             DBMS_OUTPUT.PUT_LINE(
    '發(fā)生錯(cuò)誤,修改失敗!');
             
    ROLLBACK;
            
    END;
    參數(shù)的值由調(diào)用者傳遞,傳遞的參數(shù)的個(gè)數(shù)、類型和順序應(yīng)該和定義的一致。如果順序不一致,可以采用以下調(diào)用方法。如上例,執(zhí)行語句可以改為:
     EXECUTE CHANGE_SALARY(P_RAISE=>80,P_EMPNO=>7788);
      可以看出傳遞參數(shù)的順序發(fā)生了變化,并且明確指出了參數(shù)名和要傳遞的值,=>運(yùn)算符左側(cè)是參數(shù)名,右側(cè)是參數(shù)表達(dá)式,這種賦值方法的意義較清楚。
    posted on 2010-07-26 18:20 junly 閱讀(734) 評(píng)論(0)  編輯  收藏 所屬分類: oracle/mysql/sql
    主站蜘蛛池模板: 亚洲一区二区三区在线观看蜜桃| 亚洲午夜久久影院| 男女作爱在线播放免费网站| 久久亚洲精品无码AV红樱桃| 黑人粗长大战亚洲女2021国产精品成人免费视频 | 亚洲精品成人无限看| 久草免费在线观看视频| 青青免费在线视频| 91天堂素人精品系列全集亚洲| 成年人免费网站在线观看| 国产免费久久精品99久久| 亚洲AV无码成人专区| 中文字幕亚洲无线码| 成全影视免费观看大全二| 手机看片国产免费永久| 亚洲国产精品无码第一区二区三区 | 免费一级毛片在线播放视频免费观看永久| 亚洲AV无码久久| 免费一级特黄特色大片在线 | 成人免费网站久久久| 亚洲乱码卡一卡二卡三| 在线观看亚洲精品国产| 啦啦啦在线免费视频| 在线观看免费av网站| aa毛片免费全部播放完整| 亚洲精品第一国产综合亚AV| 久久亚洲私人国产精品| 浮力影院亚洲国产第一页| 特级淫片国产免费高清视频| 亚洲啪啪免费视频| 免费人成激情视频在线观看冫| 国产成人人综合亚洲欧美丁香花 | 亚洲成人影院在线观看| 免费人成视频在线| 99re免费99re在线视频手机版| 国产成人无码精品久久久久免费 | 亚洲人成网站18禁止| 亚洲色成人网一二三区| 亚洲国产精品嫩草影院在线观看| 亚洲A∨精品一区二区三区| 成年女人视频网站免费m|