<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      [頂]ORACLE PL/SQL編程詳解之二:PL/SQL塊結構和組成元素(為山九仞,豈一日之功)

       

      []ORACLE PL/SQL編程詳解之二: 

      PL/SQL塊結構和組成元素(為山九仞,豈一日之功)

       

       

      繼上四篇:ORACLE PL/SQL編程之八:把觸發器說透

                     ORACLE PL/SQL編程之六:把過程與函數說透(窮追猛打,把根兒都拔起!)

                     [推薦]ORACLE PL/SQL編程之四:把游標說透(不怕做不到,只怕想不到) 

          [推薦]ORACLE PL/SQL編程之五:異常錯誤處理(知已知彼、百戰不殆)

       

       昨天與我的一個朋友聊天,他可是技術牛人,但從來不寫博客。我建議他寫寫博客,他說沒時間,再說沒意思。寫博客好處多多,不僅可對自己的知識進行一個總體性的提煉和總結,引發深思,同時網上也有很多技術達人,可對你的文章提出建設性的意見,不管理對自己還是對別人都是一種幫助與提高。最主要的是可以為社會留下點什么。雖然我沒有那么高尚,但人活一輩子,以后老死了總得留點東西給后輩吧~!我覺得有的人很可悲,雖然他個人能力超強,可不愿意分享自己的知識,這是為什么呢?

      一句話:通過知識共享樹立個人品牌。

      接下來介紹PL/SQL的基礎篇:PL/SQL塊結構和組成元素,還望大家繼續支持與推薦~

      本篇主要內容如下:

      2.1   PL/SQL

      2.2   PL/SQL結構

      2.3   標識符

      2.4   PL/SQL 變量類型

      2.4.1  變量類型

      2.4.2  復合類型

      2.4.2.1 記錄類型

      2.4.2.2 數組類型

      2.4.2.3 使用%TYPE

      2.4.3  使用%ROWTYPE

      2.4.4  LOB類型

      2.4.5  BIND 變量

      2.4.6  PL/SQL (TABLE)

      2.5   運算符和表達式(數據定義)

      2.5.1  關系運算符

      2.5.2  一般運算符

      2.5.3  邏輯運算符

      2.6   變量賦值

      2.6.1  字符及數字運算特點

      2.6.2  BOOLEAN 賦值

      2.6.3  數據庫賦值

      2.6.4  可轉換的類型賦值

      2.7   變量作用范圍及可見性

      2.8   注釋

      2.9   簡單例子

      2.9.1   簡單數據插入例子

      2.9.2   簡單數據刪除例子  

      2.1   PL/SQL

        PL/SQL程序由三個塊組成,即聲明部分、執行部分、異常處理部分。 

        PL/SQL塊的結構如下: 

       DECLARE  
          --聲明部分: 在此聲明PL/SQL用到的變量,類型及游標,以及局部的存儲過程和函數
        BEGIN
          -- 執行部分:  過程及SQL 語句  , 即程序的主要部分
        EXCEPTION
          -- 執行異常部分: 錯誤處理
        END;

       

        其中:執行部分不能省略。 

        PL/SQL塊可以分為三類: 

        1.        無名塊或匿名塊(anonymous):動態構造,只能執行一次,可調用其它程序,但不能被其它程序調用。

        2.        命名塊(named):是帶有名稱的匿名塊,這個名稱就是標簽。

        3.        子程序(subprogram):存儲在數據庫中的存儲過程、函數等。當在數據庫上建立好后可以在其它程序中調用它們。

        4.        觸發器Trigger):當數據庫發生操作時,會觸發一些事件,從而自動執行相應的程序。

        5.        程序包(package):存儲在數據庫中的一組子程序、變量定義。在包中的子程序可以被其它程序包或子程序調用。但如果聲明的是局部子程序,則只能在定義該局部子程序的塊中調用該局部子程序。

      2.2   PL/SQL結構

      l       PL/SQL塊中可以包含子塊;

      l       子塊可以位于 PL/SQL中的任何部分;

      l       子塊也即PL/SQL中的一條命令; 

      2.3   標識符

        PL/SQL程序設計中的標識符定義與SQL 的標識符定義的要求相同。要求和限制有:

      l       標識符名不能超過30字符;

      l       第一個字符必須為字母;

      l       不分大小寫;

      l       不能用’-‘(減號);

      l       不能是SQL保留字。

        提示:  一般不要把變量名聲明與表中字段名完全一樣,如果這樣可能得到不正確的結果. 

        例如:下面的例子將會刪除所有的紀錄,而不是’EricHu’的記錄; 

      DECLARE
         ename varchar2(20) :='EricHu';
      BEGIN
        DELETE FROM scott.emp WHERE ename=ename;
      END;

        變量命名在PL/SQL中有特別的講究,建議在系統的設計階段就要求所有編程人員共同遵守一定的要求,使得整個系統的文檔在規范上達到要求。下面是建議的命名方法:

       

      標識符

      命名規則

      例子

      程序變量

      V_name

      V_name

      程序常量

      C_Name

      C_company_name

      游標變量

      Cursor_Name

      Cursor_Emp

      異常標識

      E_name

      E_too_many

      表類型

      Name_table_type

      Emp_record_type

      Name_table

      Emp

      記錄類型

      Name_record

      Emp_record

      SQL*Plus 替代變量

      P_name

      P_sal

      綁定變量

      G_name

      G_year_sal

       2.4   PL/SQL 變量類型

        在前面的介紹中,有系統的數據類型,也可以自定義數據類型。下表給出ORACLE類型和PL/SQL中的變量類型的合法使用列表: 

      2.4.1  變量類型 

        在ORACLE8i中可以使用的變量類型有:

      類型

      子類

          

        

      ORACLE限制

      CHAR

      Character

      String

      Rowid

      Nchar

      定長字符串

       

       

      民族語言字符集

      0à32767

      可選,確省=1

      2000

      VARCHAR2

      Varchar, String

      NVARCHAR2

      可變字符串

      民族語言字符集

      0à32767

      4000

      4000

      BINARY_INTEGER

       

      帶符號整數,為整數計算優化性能

       

       

      NUMBER(p,s)

      Dec

       

      Double precision

      Integer

      Int

      Numeric

      Real

      Small int

      小數, NUMBER 的子類型

      高精度實數

      整數, NUMBER 的子類型

      整數, NUMBER 的子類型

      NUMBER等價

      NUMBER等價

      整數, integer

       

       

      LONG

       

      變長字符串

      0->2147483647

      32,767字節

      DATE

       

      日期型

      公元前471211日至公元后47121231

       

      BOOLEAN

       

      布爾型

      TRUE, FALSE,NULL

      不使用

      ROWID

       

      存放數據庫行號

       

       

      UROWID

       

      通用行標識符,字符類型

       

       

       

       

       

       

       

         1. 插入一條記錄并顯示; 

      DECLARE
         Row_id ROWID;
         info    VARCHAR2(40);
      BEGIN
        INSERT INTO scott.dept VALUES (90, '財務室', '海口')
        RETURNING rowid, dname||':'||to_char(deptno)||':'||loc
        INTO row_id, info;
        DBMS_OUTPUT.PUT_LINE('ROWID:'||row_id);
        DBMS_OUTPUT.PUT_LINE(info);
      END;

        其中:

      RETURNING子句用于檢索INSERT語句中所影響的數據行數,當INSERT語句使用VALUES 子句插入數據時,RETURNING 字句還可將列表達式、ROWIDREF值返回到輸出變量中。在使用RETURNING 子句是應注意以下幾點限制:

        1.不能與DML語句和遠程對象一起使用;

        2.不能檢索LONG 類型信息;

        3.當通過視圖向基表中插入數據時,只能與單基表視圖一起使用。 

        例2. 修改一條記錄并顯示 

      DECLARE
         Row_id ROWID;
         info   VARCHAR2(40);
      BEGIN
        UPDATE dept SET deptno=100 WHERE DNAME='財務室'
        RETURNING rowid, dname||':'||to_char(deptno)||':'||loc
        INTO row_id, info;
        DBMS_OUTPUT.PUT_LINE('ROWID:'||row_id);
        DBMS_OUTPUT.PUT_LINE(info);
      END;

        其中:

      RETURNING子句用于檢索被修改行的信息。當UPDATE語句修改單行數據時,RETURNING 子句可以檢索被修改行的ROWIDREF值,以及行中被修改列的列表達式,并可將他們存儲到PL/SQL變量或復合變量中;當UPDATE語句修改多行數據時,RETURNING 子句可以將被修改行的ROWIDREF值,以及列表達式值返回到復合變量數組中。在UPDATE中使用RETURNING 子句的限制與INSERT語句中對RETURNING子句的限制相同。 

        例3.刪除一條記錄并顯示  

      DECLARE
         Row_id ROWID;
         info   VARCHAR2(40);
      BEGIN
        DELETE dept WHERE DNAME='辦公室'
        RETURNING rowid, dname||':'||to_char(deptno)||':'||loc
        INTO row_id, info;
        DBMS_OUTPUT.PUT_LINE('ROWID:'||row_id);
        DBMS_OUTPUT.PUT_LINE(info);
      END;

        其中:

      RETURNING子句用于檢索被刪除行的信息:當DELETE語句刪除單行數據時,RETURNING 子句可以檢索被刪除行的ROWIDREF值,以及被刪除列的列表達式,并可將他們存儲到PL/SQL變量或復合變量中;當DELETE語句刪除多行數據時,RETURNING 子句可以將被刪除行的ROWIDREF值,以及列表達式值返回到復合變量數組中。在DELETE中使用RETURNING 子句的限制與INSERT語句中對RETURNING子句的限制相同。 

      2.4.2  復合類型

          ORACLE PL/SQL 中除了提供象前面介紹的各種類型外,還提供一種稱為復合類型的類型---記錄和表. 

      2.4.2.1 記錄類型

      記錄類型類似于C語言中的結構數據類型,它把邏輯相關的、分離的、基本數據類型的變量組成一個整體存儲起來,它必須包括至少一個標量型或RECORD 數據類型的成員,稱作PL/SQL RECORD 的域(FIELD),其作用是存放互不相同但邏輯相關的信息。在使用記錄數據類型變量時,需要先在聲明部分先定義記錄的組成、記錄的變量,然后在執行部分引用該記錄變量本身或其中的成員。 

        定義記錄類型語法如下: 

      TYPE record_name IS RECORD(
         v1 data_type1  [NOT NULL]  [:= default_value ],
         v2 data_type2  [NOT NULL]  [:= default_value ],
         ......
         vn data_typen  [NOT NULL]  [:= default_value ] );

        例4  

      DECLARE 
         TYPE test_rec IS RECORD(
               Name VARCHAR2(30) NOT NULL := '胡勇',
               Info VARCHAR2(100));
         rec_book test_rec;
      BEGIN
         rec_book.Name :='胡勇';
         rec_book.Info :='談PL/SQL編程;';
         DBMS_OUTPUT.PUT_LINE(rec_book.Name||'  ' ||rec_book.Info);
      END;

      可以用 SELECT語句對記錄變量進行賦值,只要保證記錄字段與查詢結果列表中的字段相配即可。 

        例5  

      DECLARE
      --定義與hr.employees表中的這幾個列相同的記錄數據類型
         TYPE RECORD_TYPE_EMPLOYEES IS RECORD(
              f_name   hr.employees.first_name%TYPE,
              h_date   hr.employees.hire_date%TYPE,
              j_id     hr.employees.job_id%TYPE);
      --聲明一個該記錄數據類型的記錄變量
         v_emp_record RECORD_TYPE_EMPLOYEES;
      
      BEGIN
         SELECT first_name, hire_date, job_id INTO v_emp_record
         FROM employees
         WHERE employee_id = &emp_id;
      
         DBMS_OUTPUT.PUT_LINE('雇員名稱:'||v_emp_record.f_name
                   ||'  雇傭日期:'||v_emp_record.h_date
                   ||'  崗位:'||v_emp_record.j_id);
      END;

        一個記錄類型的變量只能保存從數據庫中查詢出的一行記錄,若查詢出了多行記錄,就會出現錯誤。 

      2.4.2.2 數組類型

      數據是具有相同數據類型的一組成員的集合。每個成員都有一個唯一的下標,它取決于成員在數組中的位置。在PL/SQL中,數組數據類型是VARRAY 

      定義VARRY數據類型語法如下: 

      TYPE varray_name IS VARRAY(size) OF element_type [NOT NULL];

      varray_nameVARRAY數據類型的名稱,size是下整數,表示可容納的成員的最大數量,每個成員的數據類型是element_type。默認成員可以取空值,否則需要使用NOT NULL加以限制。對于VARRAY數據類型來說,必須經過三個步驟,分別是:定義、聲明、初始化。 

        例6   

      DECLARE
      --定義一個最多保存5個VARCHAR(25)數據類型成員的VARRAY數據類型
         TYPE reg_varray_type IS VARRAY(5) OF VARCHAR(25);
      --聲明一個該VARRAY數據類型的變量
         v_reg_varray REG_VARRAY_TYPE;
      
      BEGIN
      --用構造函數語法賦予初值
         v_reg_varray := reg_varray_type
               ('中國', '美國', '英國', '日本', '法國');
      
         DBMS_OUTPUT.PUT_LINE('地區名稱:'||v_reg_varray(1)||'、'
                                          ||v_reg_varray(2)||'、'
                                          ||v_reg_varray(3)||'、'
                                          ||v_reg_varray(4));
         DBMS_OUTPUT.PUT_LINE('賦予初值NULL的第5個成員的值:'||v_reg_varray(5));
      --用構造函數語法賦予初值后就可以這樣對成員賦值
         v_reg_varray(5) := '法國';
         DBMS_OUTPUT.PUT_LINE('第5個成員的值:'||v_reg_varray(5));
      END;

      2.4.2.3 使用%TYPE

      定義一個變量,其數據類型與已經定義的某個數據變量(尤其是表的某一列)的數據類型相一致,這時可以使用%TYPE

        使用%TYPE特性的優點在于:

        l         所引用的數據庫列的數據類型可以不必知道;

        l         所引用的數據庫列的數據類型可以實時改變,容易保持一致,也不用修改PL/SQL程序。 

        例7 

      DECLARE
         -- 用%TYPE 類型定義與表相配的字段
         TYPE T_Record IS RECORD(
              T_no emp.empno%TYPE,
              T_name emp.ename%TYPE,
              T_sal emp.sal%TYPE );
         -- 聲明接收數據的變量
         v_emp T_Record;
      BEGIN
         SELECT empno, ename, sal INTO v_emp FROM emp WHERE empno=7788;
         DBMS_OUTPUT.PUT_LINE
          (TO_CHAR(v_emp.t_no)||' '||v_emp.t_name||'  ' || TO_CHAR(v_emp.t_sal));
      END;

        例8 

      DECLARE
         v_empno emp.empno%TYPE :=&no;
         Type t_record is record (
              v_name   emp.ename%TYPE,
              v_sal    emp.sal%TYPE,
              v_date   emp.hiredate%TYPE);
         Rec t_record;
      BEGIN
         SELECT ename, sal, hiredate INTO Rec FROM emp WHERE empno=v_empno;
         DBMS_OUTPUT.PUT_LINE(Rec.v_name||'---'||Rec.v_sal||'--'||Rec.v_date);
      END;

      2.4.3  使用%ROWTYPE

      PL/SQL 提供%ROWTYPE操作符, 返回一個記錄類型, 其數據類型和數據庫表的數據結構相一致。

        使用%ROWTYPE特性的優點在于:

        l         所引用的數據庫中列的個數和數據類型可以不必知道;

        l         所引用的數據庫中列的個數和數據類型可以實時改變,容易保持一致,也不用修改PL/SQL程序。 

        例9 

      DECLARE
          v_empno emp.empno%TYPE :=&no;
          rec emp%ROWTYPE;
      BEGIN
          SELECT * INTO rec FROM emp WHERE empno=v_empno;
          DBMS_OUTPUT.PUT_LINE('姓名:'||rec.ename||'工資:'||rec.sal||'工作時間:'||rec.hiredate); 
      END;

      2.4.4  LOB類型

        ORACLE提供了LOB (Large OBject)類型,用于存儲大的數據對象的類型。ORACLE目前主要支持BFILE, BLOB, CLOB NCLOB 類型。 

      BFILE (Movie)

          存放大的二進制數據對象,這些數據文件不放在數據庫里,而是放在操作系統的某個目錄里,數據庫的表里只存放文件的目錄。 

      BLOB(Photo)

          存儲大的二進制數據類型。變量存儲大的二進制對象的位置。大二進制對象的大小<=4GB 

      CLOB(Book)

          存儲大的字符數據類型。每個變量存儲大字符對象的位置,該位置指到大字符數據塊。大字符對象的大小<=4GB 

      NCLOB

          存儲大的NCHAR字符數據類型。每個變量存儲大字符對象的位置,該位置指到大字符數據塊。大字符對象的大小<=4GB 

      2.4.5  BIND 變量

        綁定變量是在主機環境中定義的變量。在PL/SQL 程序中可以使用綁定變量作為他們將要使用的其它變量。為了在PL/SQL 環境中聲明綁定變量,使用命令VARIABLE。例如:  

      VARIABLE return_code NUMBER
      VARIABLE return_msg VARCHAR2(20)

      可以通過SQL*Plus命令中的PRINT 顯示綁定變量的值。例如:  

      PRINT return_code
      PRINT return_msg

      10

      VARIABLE result NUMBER;
      BEGIN
        SELECT (sal*10)+nvl(comm, 0) INTO :result FROM emp 
        WHERE empno=7844;
      END;
      --然后再執行
      PRINT result

      2.4.6  PL/SQL (TABLE)

        定義記錄表(或索引表)數據類型。它與記錄類型相似,但它是對記錄類型的擴展。它可以處理多行記錄,類似于高級中的二維數組,使得可以在PL/SQL中模仿數據庫中的表。 

      定義記錄表類型的語法如下: 

      TYPE table_name IS TABLE OF element_type [NOT NULL]
      INDEX BY [BINARY_INTEGER | PLS_INTEGER | VARRAY2];

        關鍵字INDEX BY表示創建一個主鍵索引,以便引用記錄表變量中的特定行。 

      方法

      描述

      EXISTS(n)

      如果集合的第n個成員存在,則返回true

      COUNT

      返回已經分配了存儲空間即賦值了的成員數量

      FIRST

      LAST

      FIRST:返回成員的最低下標值

      LAST返回成員的最高下標值

      PRIOR(n)

      返回下標為n的成員的前一個成員的下標。如果沒有則返回NULL

      NEXT(N)

      返回下標為n的成員的后一個成員的下標。如果沒有則返回NULL

      TRIM

      TRIM:刪除末尾一個成員

      TRIM(n) :刪除末尾n個成員

      DELETE

      DELETE:刪除所有成員

      DELETE(n) :刪除第n個成員

      DELETE(m, n) :刪除從nm的成員

      EXTEND

      EXTEND:添加一個null成員

      EXTEND(n):添加nnull成員

      EXTEND(n,i):添加n個成員,其值與第i個成員相同

      LIMIT

      返回在varray類型變量中出現的最高下標值

         11 

      DECLARE
        TYPE dept_table_type IS TABLE OF 
             dept%ROWTYPE INDEX BY BINARY_INTEGER;
        my_dname_table dept_table_type;
        v_count number(2) :=4;
      BEGIN
        FOR int IN 1 .. v_count LOOP
          SELECT * INTO my_dname_table(int) FROM dept WHERE deptno=int*10;
        END LOOP;
        FOR int IN my_dname_table.FIRST .. my_dname_table.LAST LOOP
        DBMS_OUTPUT.PUT_LINE('Department number: '||my_dname_table(int).deptno);
        DBMS_OUTPUT.PUT_LINE('Department name: '|| my_dname_table(int).dname);
        END LOOP;
      END;

         12:按一維數組使用記錄表 

      DECLARE
      --定義記錄表數據類型
         TYPE reg_table_type IS TABLE OF varchar2(25)
         INDEX BY BINARY_INTEGER;
      --聲明記錄表數據類型的變量
         v_reg_table REG_TABLE_TYPE;
         
      BEGIN
         v_reg_table(1) := 'Europe';
         v_reg_table(2) := 'Americas';
         v_reg_table(3) := 'Asia';
         v_reg_table(4) := 'Middle East and Africa';
         v_reg_table(5) := 'NULL';
      
         DBMS_OUTPUT.PUT_LINE('地區名稱:'||v_reg_table (1)||'、'
                                          ||v_reg_table (2)||'、'
                                          ||v_reg_table (3)||'、'
                                          ||v_reg_table (4));
         DBMS_OUTPUT.PUT_LINE('第5個成員的值:'||v_reg_table(5));
      END;

        例13:按二維數組使用記錄表 

      DECLARE
      --定義記錄表數據類型
         TYPE emp_table_type IS TABLE OF employees%ROWTYPE
         INDEX BY BINARY_INTEGER;
      --聲明記錄表數據類型的變量
         v_emp_table EMP_TABLE_TYPE;
      BEGIN
         SELECT first_name, hire_date, job_id INTO
         v_emp_table(1).first_name,v_emp_table(1).hire_date, v_emp_table(1).job_id
         FROM employees WHERE employee_id = 177;
         SELECT first_name, hire_date, job_id INTO
         v_emp_table(2).first_name,v_emp_table(2).hire_date, v_emp_table(2).job_id
         FROM employees WHERE employee_id = 178;
      
         DBMS_OUTPUT.PUT_LINE('177雇員名稱:'||v_emp_table(1).first_name
                   ||'  雇傭日期:'||v_emp_table(1).hire_date
                   ||'  崗位:'||v_emp_table(1).job_id);
         DBMS_OUTPUT.PUT_LINE('178雇員名稱:'||v_emp_table(2).first_name
                   ||'  雇傭日期:'||v_emp_table(2).hire_date
                   ||'  崗位:'||v_emp_table(2).job_id);
      END;
      

      2.5   運算符和表達式(數據定義)

      2.5.1  關系運算符 

      運算符

      意義

      =

      等于

      <> , != , ~= , ^=

      不等于

      小于

      大于

      <=

      小于或等于

      >=

      大于或等于

       2.5.2  一般運算符 

      運算符

      意義

      +

      加號

      -

      減號

      *

      乘號

      /

      除號

      :=

      賦值號

      =>

      關系號

      ..

      范圍運算符

      ||

      字符連接符

       2.5.3  邏輯運算符 

      運算符

      意義

      IS NULL

      是空值 

      BETWEEN  AND

      介于兩者之間

      IN

      在一列值中間 

      AND

      邏輯與

      OR

      邏輯或

      NOT

      取返,IS NOT NULL, NOT IN

       2.6   變量賦值

        在PL/SQL編程中,變量賦值是一個值得注意的地方,它的語法如下:

         variable  := expression ;

        variable 是一個PL/SQL變量, expression 是一個PL/SQL 表達式. 

      2.6.1  字符及數字運算特點 

        空值加數字仍是空值:NULL + < 數字> = NULL 

        空值加(連接)字符,結果為字符:NULL || <字符串> = < 字符串> 

      2.6.2  BOOLEAN 賦值 

        布爾值只有TRUE, FALSE NULL 三個值。如: 

      DECLARE
        bDone BOOLEAN;
      BEGIN
        bDone := FALSE;
        WHILE NOT bDone LOOP
        Null;
        END LOOP;
      END;

      2.6.3  數據庫賦值 

        數據庫賦值是通過 SELECT語句來完成的,每次執行 SELECT語句就賦值一次,一般要求被賦值的變量與SELECT中的列名要一一對應。如:

        例14 

      DECLARE
        emp_id    emp.empno%TYPE :=7788;
        emp_name  emp.ename%TYPE;
        wages     emp.sal%TYPE;
      BEGIN
        SELECT ename, NVL(sal,0) + NVL(comm,0) INTO emp_name, wages 
        FROM emp WHERE empno = emp_id;
        DBMS_OUTPUT.PUT_LINE(emp_name||'----'||to_char(wages));
      END;
      

        提示:不能將SELECT語句中的列賦值給布爾變量。 

      2.6.4  可轉換的類型賦值 

      l       CHAR 轉換為 NUMBER

      使用 TO_NUMBER 函數來完成字符到數字的轉換,如:

      v_total := TO_NUMBER('100.0') + sal;

      l       NUMBER 轉換為CHAR

          使用 TO_CHAR函數可以實現數字到字符的轉換,如:

       v_comm := TO_CHAR('123.45') || '元' ;
      

      l       字符轉換為日期:

      使用 TO_DATE函數可以實現  字符到日期的轉換,如:

      v_date := TO_DATE('2001.07.03','yyyy.mm.dd');

      l       日期轉換為字符

      使用 TO_CHAR函數可以實現日期到字符的轉換,如:

      v_to_day := TO_CHAR(SYSDATE, 'yyyy.mm.dd hh24:mi:ss') ;

      2.7   變量作用范圍及可見性

        在PL/SQL編程中,如果在變量的定義上沒有做到統一的話,可能會隱藏一些危險的錯誤,這樣的原因主要是變量的作用范圍所致。變量的作用域是指變量的有效作用范圍,與其它高級語言類似,PL/SQL的變量作用范圍特點是:

      l       變量的作用范圍是在你所引用的程序單元(塊、子程序、包)內。即從聲明變量開始到該塊的結束。

      l       一個變量(標識)只能在你所引用的塊內是可見的。

      l       當一個變量超出了作用范圍,PL/SQL引擎就釋放用來存放該變量的空間(因為它可能不用了)。

      l       在子塊中重新定義該變量后,它的作用僅在該塊內。 

        例15 

      DECLARE
         Emess char(80);
      BEGIN
      
         DECLARE
            V1 NUMBER(4);
         BEGIN
            SELECT empno INTO v1 FROM emp WHERE LOWER(job)='president';
            DBMS_OUTPUT.PUT_LINE(V1);
         EXCEPTION
            When TOO_MANY_ROWS THEN
               DBMS_OUTPUT.PUT_LINE ('More than one president');
         END;
      
         DECLARE 
            V1 NUMBER(4);
         BEGIN
            SELECT empno INTO v1 FROM emp WHERE LOWER(job)='manager';
         EXCEPTION
            When TOO_MANY_ROWS THEN
                DBMS_OUTPUT.PUT_LINE ('More than one manager');
         END;
      
      EXCEPTION
         When others THEN
            Emess:=substr(SQLERRM,1,80);
            DBMS_OUTPUT.PUT_LINE(emess);
      END;

      2.8   注釋

          PL/SQL里,可以使用兩種符號來寫注釋,即:

      l       使用雙 ‘-‘ ( 減號) 加注釋

      PL/SQL允許用來寫注釋,它的作用范圍是只能在一行有效。如:   

       V_Sal  NUMBER(12,2); -- 人員的工資變量。
      

      l         使用 /*   */  來加一行或多行注釋,如:

      /***********************************************/
      /* 文件名: department_salary.sql      */
      /* 作 者: EricHu                     */
      /* 時 間: 2011-5-9                  */
      /***********************************************/

        提示:被解釋后存放在數據庫中的 PL/SQL 程序,一般系統自動將程序頭部的注釋去掉。只有在 PROCEDURE 之后的注釋才被保留;另外程序中的空行也自動被去掉。

      2.9   簡單例子

      2.9.1   簡單數據插入例子 

        例16 

      /***********************************************/
      /* 文件名: test.sql                  */
      /* 說 明:
             一個簡單的插入測試,無實際應用。*/
      /* 作 者: EricHu                     */
      /* 時 間: 2011-5-9                  */
      /***********************************************/
      DECLARE
        v_ename   VARCHAR2(20) := 'Bill';
        v_sal       NUMBER(7,2) :=1234.56;
        v_deptno   NUMBER(2) := 10;
        v_empno   NUMBER(4) := 8888;
      BEGIN
        INSERT INTO emp ( empno, ename, JOB, sal, deptno , hiredate )  
        VALUES (v_empno, v_ename, 'Manager', v_sal, v_deptno, 
                  TO_DATE('1954.06.09','yyyy.mm.dd') );
        COMMIT;
      END;

      2.9.2   簡單數據刪除例子

        例17 

      /***********************************************/
      /* 文件名: test_deletedata.sql      */
      /* 說 明:
             簡單的刪除例子,不是實際應用。 */
      /* 作 者: EricHu                     */
      /* 時 間: 2011-5-9                  */
      /***********************************************/
      DECLARE
        v_ename   VARCHAR2(20) := 'Bill';
        v_sal       NUMBER(7,2) :=1234.56;
        v_deptno   NUMBER(2) := 10;
        v_empno   NUMBER(4) := 8888;
      BEGIN
        INSERT INTO emp ( empno, ename, JOB, sal, deptno , hiredate )  
      VALUES ( v_empno, v_ename, ‘Manager’, v_sal, v_deptno, 
      TO_DATE(’1954.06.09’,’yyyy.mm.dd’) );
        COMMIT;
      END;
       DECLARE
        v_empno   number(4) := 8888;
      BEGIN
        DELETE FROM emp WHERE empno=v_empno;
        COMMIT;
      END;
      

        

      posted @ 2011-05-10 11:51  .NET快速開發框架  閱讀(41107)  評論(53)    收藏  舉報
      主站蜘蛛池模板: 日韩欧美一卡2卡3卡4卡无卡免费2020| 乱色精品无码一区二区国产盗 | 亚洲av日韩av综合在线观看| 日本不卡码一区二区三区| 久色伊人激情文学你懂的| 风流少妇树林打野战视频 | 狠狠色综合网站久久久久久久| 777天堂麻豆爱综合视频| 国产色a在线观看| 中文字幕有码无码人妻在线| 无码国产精品一区二区av| 国产老熟女狂叫对白| 大胸美女被吃奶爽死视频| 久热这里有精品视频在线| 色悠悠国产精品免费观看| 亚洲欧洲一区二区免费| 婷婷六月色| 一区二区偷拍美女撒尿视频| 亚洲成a人在线播放www| 羞羞影院午夜男女爽爽免费视频| 亚洲欧美偷国产日韩| 日韩中文字幕V亚洲中文字幕| 色偷偷亚洲男人的天堂| 亚洲性人人天天夜夜摸18禁止| 亚洲V天堂V手机在线| 97超级碰碰碰碰久久久久| 日本一区午夜艳熟免费| 日本一区二区三区专线| 库伦旗| 一面膜上边一面膜下边视频| 国产成人AV国语在线观看| 又粗又硬又黄a级毛片| 日韩有码中文字幕一区二区| 免费无码黄十八禁网站| 狠狠婷婷综合久久久久久| 午夜福利免费视频一区二区| 久久精品国产www456c0m| 3d动漫精品一区二区三区| 色综合激情丁香七月色综合| 亚洲尤码不卡av麻豆| 免费无遮挡无码永久视频|