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

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

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

    憨厚生

    ----Java's Slave----
    ***Java's Host***

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      165 隨筆 :: 17 文章 :: 90 評論 :: 0 Trackbacks
    轉 http://www.tkk7.com/bibi/archive/2006/08/21/64890.html

    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(
    '¹ÍÔ±Ãû:' || 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 2009-03-25 11:24 二胡 閱讀(217) 評論(0)  編輯  收藏 所屬分類: pl/sql
    主站蜘蛛池模板: 亚洲黄网在线观看| 99免费观看视频| 亚洲综合精品香蕉久久网97| 未满十八私人高清免费影院| 日本成年免费网站| 亚洲国产成人久久精品app | 波多野结衣中文一区二区免费 | 亚洲综合无码一区二区| 色播在线永久免费视频| 国产性生大片免费观看性| 亚洲AV色吊丝无码| 日韩精品成人无码专区免费| 女人裸身j部免费视频无遮挡| 国产精品另类激情久久久免费 | 久久久精品免费视频| 丁香亚洲综合五月天婷婷| 亚洲AV无码专区在线观看成人| 在线观看亚洲av每日更新| a级毛片免费网站| 久久夜色精品国产亚洲| 在线看无码的免费网站| 免费人成又黄又爽的视频在线电影| 亚洲日本精品一区二区| 亚洲精品无码永久在线观看| 成人免费无码视频在线网站| 丁香花在线视频观看免费 | 亚洲人成小说网站色| 亚洲乱码无码永久不卡在线| 日韩黄色免费观看| 美女隐私免费视频看| 91亚洲国产成人久久精品网址| 亚洲人成人无码网www国产| 最近最新中文字幕完整版免费高清| 国产亚洲精品2021自在线| 亚洲福利视频网站| 久久久影院亚洲精品| 国产AⅤ无码专区亚洲AV| 免费一级一片一毛片| 免费观看的a级毛片的网站| 亚洲三级高清免费| 中文字幕免费在线|