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

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

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

    posts - 120,  comments - 19,  trackbacks - 0

    1.?? 簡介

    1.1 ??? 結構

    DECLARE -- 定義

    BEGIN? -- 執行部分

    EXCEPTION? -- 例外處理

    END;? -- 結束

    ?

    set serveroutput on;
    DECLARE v_ename VARCHAR2(
    5
    );
    BEGIN
    SELECT ename INTO v_ename FROM emp WHERE empno=&no;
    dbms_output.put_line(
    '1í?±??:'
    || v_ename);
    EXCEPTION
    WHEN NO_DATA_FOUND THEN
    dbms_output.put_line(
    'please input correct employees no!'
    );
    END;
    /

    ?

    1.2 ??? 塊分類

    <<outer>> <<inner>>

    1.3 ??? 子程序

    1.1.1 ????? 過程

    執行特定的操作

    ? CREATE or replace PROCEDURE update_sal(nameVARCHAR2,newsal NUMBER)
    IS
    BEGIN
    ???? UPDATE emp SET sal=newsal WHERE lower(ename)=lower(name);
    END;
    /

    調用:

    exec update_sal( 'SMITH' , 10 )
    call update_sal(
    'SMITH' , 800 )

    1.1.2 ????? 函數

    返回特定數據

    CREATE or replace FUNCTION annual_income(nameVARCHAR2)
    RETURNNUMBERIS
    ?????? annual_salary NUMBER(
    7 , 2
    );
    BEGIN
    SELECT sal*
    12 + nvl(comm, 0
    )? into annual_salary FROM emp WHERE lower(ename)=lower(name);
    RETURN annual_salary;
    END;
    /

    調用 :

    SQL> VAR income NUMBER

    SQL> CALL annual_income('scott') INTO : income;

    調用完成。

    SQL> print income

    ??? INCOME

    ----------

    ???? 36000

    1.1.3 ?????

    邏輯組合相關的過程和函數

    -- 包規范
    CREATE or replace PACKAGE emp_pkg IS
    ? PROCEDURE update_sal(nameVARCHAR2, newsal NUMBER);
    ? FUNCTION annual_income(nameVARCHAR2) RETURNNUMBER;
    END;

    -- 包體
    CREATE or replace PACKAGE BODY emp_pkg IS
    ?????? PROCEDURE update_sal(nameVARCHAR2, newsal NUMBER)
    ?????? IS
    ?????? BEGIN
    ??????????? UPDATE emp SET sal = newsal WHERE lower(ename) = lower(name);
    ?????? END;
    ??????
    ?????? FUNCTION annual_income(nameVARCHAR2) RETURNNUMBER
    ?????? IS
    ???????? annual_salary NUMBER(
    7 , 2 );
    ?????? BEGIN
    ??????????? SELECT sal *
    12 + nvl(comm, 0
    ) into annual_salary FROM emp WHERE lower(ename) = lower(name);
    ??????????? RETURN annual_salary;
    ?????? END;
    END;
    /

    調用:

    SQL> call emp_pkg .update_sal('SMITH',1500);

    Or

    SQL> VAR income NUMBER

    SQL> CALL emp_pkg . annual_income('scott') INTO : income;

    調用完成。

    SQL> print income

    ??? INCOME

    ----------

    ???? 36000

    1.4 ??? 觸發器

    ???? 是隱含執行的存儲過程。

    create or replace trigger update_cascade
    ?afterupdateof deptno on dept
    ?foreachrow
    begin
    ???? update emp set deptno=:new.deptno
    ???? where deptno=:old.deptno;
    end;
    /????

    2.?? 定義并使用變量

    1.5 ??? 標量變量

    1.1.4 ????? 特殊變量說明

    LONG(32760 字節 ) VARCHAR2(32767 字節 ) 類似,定義變長的字符串

    LONG RAW 用于定義變長的二進制數據 (32760 字節 )

    BINARY_INTEGER 定義整數,范圍為: -2147483647~2147483647 ( 非表列使用 )

    BOOLEAN TRUE/FALSE/NULL ( 非表列使用 )

    BINARY_FLOAT/BINARY_DOUBLE ORACLE10 所有

    1.1.5 ????? 定義使用

    Identifier [CONSTANT] datatype [not null] [:= | default expr]

    例如: v_valid BOOLEAN NOT NULL DEFAULT FALSE;

    C_tax_rate CONSTANT NUMBER(3,2):=0.03;

    V_ename emp.ename%TYPE;

    1.6 ??? 復合變量

    1.1.6 ????? Pl/sql 記錄

    類似于高級語言中的結構

    DECLARE
    TYPE emp_record_type ISRECORD(
    ??? name emp.ename%TYPE,
    ??? salary emp.sal%TYPE,
    ? title emp.job%TYPE
    );
    emp_record emp_record_type;
    BEGIN
    ???? SELECT ename,sal,job INTO emp_record FROM emp WHERE empno=
    7788 ;
    ???? dbms_output.put_line(
    ' 雇員名 '
    ||emp_record.name);
    end;
    /????

    1.1.7 ????? Pl/sql

    類似于高級語言中的數組,下標可以為負 , 個數無限制。

    DECLARE
    TYPE ename_table_type ISTABLEOF emp.ename%TYPE
    ???? INDEXBYBINARY_INTEGER;
    ???? ename_table ename_table_type;
    BEGIN
    ???? SELECT ename? INTO ename_table(-
    1 ) FROM emp WHERE empno= 7788 ;
    ???? dbms_output.put_line(
    ' 雇員名 ' ||ename_table(- 1
    ));
    end;
    /????

    1.1.8 ????? 嵌套表

    類似于高級語言中的數組,下標不可以為負,個數無限制。

    CREATE OR REPLACE TYPE emp_type? ASOBJECT(
    ?????? nameVARCHAR2(
    10
    ),
    ?????? salary NUMBER(
    6 , 2
    ),
    ?????? hiredate DATE
    );
    /
    CREATEORREPLACETYPE emp_array ISTABLEOF emp_type;
    /

    CREATEORREPLACEtable department(
    ?????? deptno NUMBER(
    2
    ),
    ?????? dname VARCHAR2(
    10
    ),
    ?????? employee emp_array??????
    )nestedtable employee storeas employee;

    ?

    1.1.9 ????? VARRAY

    VARRAY 類似于嵌套表,它可以作為表列和對象類型屬性的數據類型,個數有限制。

    CREATE OR REPLACE TYPE article_type? ASOBJECT(
    ?????? title VARCHAR2(
    30
    ),
    ?????? pubdate DATE
    );
    /
    CREATEORREPLACETYPE article_array ISVARRAY(
    20
    ) OF article_type;
    /

    CREATEORREPLACEtable author(
    ?????? idNUMBER(
    6
    ),
    ?????? nameVARCHAR2(
    10
    ),
    ? ?????article article_array??????
    );

    1.7 ??? 參照變量

    用于存放數值指針的變量。使得應用程序共享相同對象,從而降低占用空間。

    1.1.10 REF CURSOR

    游標變量

    DECLARE
    ? TYPE c1 ISREFCURSOR;
    ? emp_cursor c1;
    ? v_ename emp.ename%TYPE;
    ? v_sal?? emp.sal%TYPE;
    BEGIN
    ? OPEN emp_cursor FOR
    ??? SELECT ename, sal FROM emp ;
    --WHERE deptno = 10;
    ? LOOP
    ??? FETCH emp_cursor
    ????? INTO v_ename, v_sal;
    ??? EXITWHEN emp_cursor%NOTFOUND;
    ??? dbms_output.put_line(v_ename);
    ? ENDLOOP;
    ? CLOSE emp_cursor;
    END;
    /

    1.1.11 REF obj_type

    為了共享相同對象,可以用 ref 引用對象類型。

    CREATE OR REPLACE TYPE home_type AS OBJECT(

    ?????? street VARCHAR2(50),city VARCHAR2(20),

    ?????? state VARCHAR2(20),zipcode VARCHAR2(6),

    ?????? owner VARCHAR2(10)

    );

    /

    CREATE TABLE homes OF home_type;

    INSERT INTO homes VALUES(' 呼倫北路 12 ',' 呼和浩特 ',' 內蒙 ','010010',' 馬鳴 ');

    INSERT INTO homes VALUES(' 呼倫北路 13 ',' 呼和浩特 ',' 內蒙 ','010010',' 秦斌 ');

    CREATE TABLE person(

    ?????? id NUMBER(6) PRIMARY KEY,

    ?????? name VARCHAR2(10), addr REF home_type

    );

    INSERT INTO? person SELECT 1,' 馬鳴 ',ref(p) FROM homes p WHERE p.owner=' 馬鳴 ';

    1.8 ??? LOB 變量

    內部 : CLOB BLOB NCLOB ;外部: BFILE

    1.9 ??? PL/SQL 變量

    1.1.12 使用 sql*plus 變量

    var namevarchar2( 10 )
    begin
    ???? select ename into :namefrom emp
    ???? where empno=
    7788
    ;
    end;
    /
    print name??

    ?

    1.1.13 使用 procedure Builder 變量

    .createcharname length 10
    begin
    ???? select ename into :namefrom emp
    ???? where empno=
    7788 ;
    end;
    /
    text_to.put_line(:name);??

    1.1.14 使用 pro*c/c++ 變量

    char name[ 10 ];
    execsqlexecute
    begin
    ???? select ename into :namefrom emp
    ???? where empno=
    7788
    ;
    end-exec;
    printf(
    ' 雇員名: %s\n' ,name);


    posted on 2006-08-29 08:52 阿成 閱讀(353) 評論(0)  編輯  收藏 所屬分類: 數據庫
    主站蜘蛛池模板: 国产成人3p视频免费观看| 国产视频精品免费视频| 无码精品A∨在线观看免费| 亚洲国产精品无码av| 久久国产乱子伦精品免费午夜 | 免费无码成人AV片在线在线播放| 亚洲综合激情九月婷婷 | 亚洲综合综合在线| 6080午夜一级毛片免费看| 亚洲精品在线播放| 在线观看H网址免费入口| 激情综合亚洲色婷婷五月APP| 成人在线免费观看| 亚洲av成本人无码网站| 免费中文字幕不卡视频| 一个人看的www免费在线视频| 精品亚洲视频在线观看 | 国产精品国产亚洲精品看不卡| 91在线视频免费观看| 亚洲人成依人成综合网| 久久久久国产精品免费看| 亚洲白色白色永久观看| 在线成人a毛片免费播放| 亚洲av无码专区在线电影| 亚洲欧洲中文日韩av乱码| 国产午夜精品久久久久免费视| 亚洲人成电影福利在线播放| 日韩视频在线精品视频免费观看| 亚洲乱码国产乱码精华| 国产成人精品亚洲精品| 1000部拍拍拍18勿入免费视频下载| 国产亚洲国产bv网站在线| 亚洲精品无码久久久| 99在线观看精品免费99| 在线看亚洲十八禁网站| 亚洲国产精品无码久久久不卡| 无人在线观看免费高清视频| 亚洲精品蜜桃久久久久久| 1024免费福利永久观看网站| 成人婷婷网色偷偷亚洲男人的天堂 | 免费人成在线观看网站视频 |