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

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

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

    posts - 61,  comments - 2033,  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-21 21:39 魚上游 閱讀(3595) 評論(0)  編輯  收藏 所屬分類: 爪哇友鄰真不少
    <2006年8月>
    303112345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    常用鏈接

    留言簿(82)

    隨筆分類(59)

    文章分類(21)

    相冊

    收藏夾(40)

    GoodSites

    搜索

    •  

    積分與排名

    • 積分 - 1267158
    • 排名 - 22

    最新評論

    閱讀排行榜

    主站蜘蛛池模板: 热99RE久久精品这里都是精品免费 | 91青青青国产在观免费影视 | 久久亚洲精品无码播放| 色天使色婷婷在线影院亚洲| 久久不见久久见中文字幕免费 | 亚洲JLZZJLZZ少妇| 永久免费无码网站在线观看| 亚洲日韩看片无码电影| 精品国产麻豆免费网站| 久久人午夜亚洲精品无码区| 真实乱视频国产免费观看| jizzjizz亚洲日本少妇| 国产免费AV片无码永久免费 | a级毛片视频免费观看| 久久久久久a亚洲欧洲aⅴ| 精品一卡2卡三卡4卡免费视频| 久久久亚洲精品无码| 日韩免费人妻AV无码专区蜜桃| 亚洲AV无码成人精品区蜜桃| 久久久久久AV无码免费网站| 亚洲精品乱码久久久久久下载| 日韩免费一区二区三区在线| 在线精品亚洲一区二区| 一区国严二区亚洲三区| 精品国产呦系列在线观看免费| 久久青青成人亚洲精品| 精品香蕉在线观看免费| 鲁死你资源站亚洲av| 亚洲视频在线免费| 一区二区免费视频| 亚洲区日韩精品中文字幕| 免费一级做a爰片久久毛片潮喷| 精品国产污污免费网站入口| 亚洲综合视频在线| 国产精品高清全国免费观看| 丰满妇女做a级毛片免费观看| 亚洲AV美女一区二区三区| 成人性生活免费视频| 国产精品青草视频免费播放| 亚洲无圣光一区二区| 国产免费观看黄AV片|