posts - 40,  comments - 7,  trackbacks - 0
          寫一些關于PL/SQL的語法,免得等到用到的時候還要去亂翻。
          1。控制流程(if,while)
          2。循環(for)
          3。游標(cursor)
          4。異常處理(exception)

          1。控制流程()


          A.條件語句
          IF <statement> THEN
          ?? PL/SQL
          END IF;

          IF <statement> THEN
          ?? PL/SQL
          ELSE
          ?? PL/SQL
          END IF;

          IF
          <statement> THEN
          ?? PL/SQL
          ELSIF <statement> THEN
          ?? PL/SQL
          END IF;


          2。循環

          A.simple loop
          LOOP
          ?? SQL
          ?? EXIT WHEN <statement>;
          END LOOP;

          LOOP
          ?? SQL
          ?? IF
          <statement> THEN
          ?? EXIT;
          ?? END IF;
          END LOOP;

          B.While loop
          WHILE <statement> LOOP
          ?? SQL
          END LOOP;

          C.For loop
          FOR $counter in $low .. $high LOOP
          ?? SQL
          END LOOP


          3。游標

          在PL/SQL程序中定義的游標叫做顯式游標。

          A.顯式游標的處理由四個部分組成:
          cursor $cursorname is $Query;   --定義游標
          open $cursorname;         --打開游標
          fetch $cursorname into $othervariable  --把游標中的東西取出
          close $cursorname??? --關閉游標

          B.游標屬性
          %found?? ?? ?? 布爾型屬性,當最近一次讀紀錄成功
          ,為true.
          %nofound                失敗時,為false.
          %isopen
          %rowcount?? ?? 返回已從游標中讀取的記錄數。

          C.參數化游標

          所有的SQL語句在上下文區內部都是可執行的,因此都有一個游標指向上下文區,此游標就是所謂的SQL游標。
          與顯式游標不同,SQL游標不被程序打開和關閉。


          4.異常處理概念

          異常處理是用來處理正常執行過程中未預料的事件。如果PL/SQL程序塊一旦產生異常而又沒有指出如何處理時,程序會自動終止。
          異常處理部分放在PL/SQL的后半部分,結構為:

          EXCEPTION
          ?????? WHEN first_exception THEN <code to handle first exception>
          ?????? WHEN second_exception THEN <code to handle second exception>
          ?????? WHEN OTHERS THEN <
          code to handle second exception >? --OTHERS必須放在最后

          異常分為預定義和用戶定義兩種。
          用戶定義的異常是通過顯式使用RAISE語句來引發。如

          DECLARE
          ? e_TooManyStudents EXCEPTION;? -- 類型為Exception,用于指示錯誤條件
          ? v_CurrentStudents NUMBER(3);? -- HIS-101學生注冊當前號
          ? v_MaxStudents NUMBER(3);????? -- HIS-101學生注冊允許的最大號

          BEGIN
           /* 找出注冊學生當前號和允許的最大號 */

          ? SELECT current_students, max_students

          ??? INTO v_CurrentStudents, v_MaxStudents

          ??? FROM classes

          ??? WHERE department = 'HIS' AND course = 101;

          ? /* 檢查學生的號 */

          ? IF v_CurrentStudents > v_MaxStudents THEN

          /* 太多的學生注冊,則觸發例外處理 */

          ? RAISE e_TooManyStudents;

          ? END IF;

          EXCEPTION

          ? WHEN e_TooManyStudents THEN

          ??? /* 當太多的學生注冊,就插入信息解釋發生過錯誤 */

          ??? INSERT INTO log_table (info) VALUES ('History 101 has ' || v_CurrentStudents ||

          ????? 'students: max allowed is ' || v_MaxStudents);

          END;


          END;

          用戶定義的的異常處理
          可以使用RAISE_APPLICATION_ERROR來創建自己的錯誤處理:
          RAISE_APPLICATION_ERROR(error_number,error_message,[keep_errors]);
          其中
          error_number是從-20000到-20999之間的參數; error_message是相應的提示信息,小于512字節。如:

          CREATE OR REPLACE PROCEDURE Register (
          p_StudentID IN students.id%TYPE,
          p_Department IN classes.department%TYPE,
          p_Course IN classes.course%TYPE) AS
          v_CurrentStudents NUMBER;? -- 班上學生的當前號
          v_MaxStudents NUMBER;????? -- 班上學生的最大號

          BEGIN
          /* 找出學生的當前號和最大號 */
          SELECT current_students, max_students
          ?INTO v_CurrentStudents, v_MaxStudents
          FROM classes
          WHERE course = p_Course
          AND department = p_Department;

          /* 確認另外的學生是否有足夠的教室 */
          IF v_CurrentStudents + 1 > v_MaxStudents THEN
          RAISE_APPLICATION_ERROR(-20000, 'Can''t add more students to ' ||
          p_Department || ' ' || p_Course);
          END IF;

          /* 加一個學生在本班 */
          ClassPackage.AddStudent(p_StudentID, p_Department, p_Course);

          EXCEPTION
          WHEN NO_DATA_FOUND THEN
             
          RAISE_APPLICATION_ERROR(-20001, p_Department || ' ' || p_Course ||
          ??? ?? ??
          ' doesn''t exist!');
          END Register;

          posted on 2007-01-23 10:10 Lansing 閱讀(373) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2007年1月>
          31123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          歡迎探討,努力學習Java哈

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          Lansing's Download

          Lansing's Link

          我的博客

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 上蔡县| 正阳县| 舞阳县| 西平县| 当雄县| 调兵山市| 邵阳市| 江源县| 奉化市| 楚雄市| 高淳县| 晋州市| 三河市| 永德县| 玉树县| 光山县| 惠安县| 南昌县| 时尚| 阜宁县| 平武县| 黄浦区| 昭通市| 阳谷县| 皮山县| 安徽省| 宜宾县| 康保县| 调兵山市| 桂平市| 乐山市| 武山县| 栾城县| 阜南县| 阿荣旗| 卢龙县| 兴海县| 钟山县| 浦江县| 伊吾县| 长顺县|