konhon

          忘掉過(guò)去,展望未來(lái)。找回自我,超越自我。
          逃避不一定躲的過(guò), 面對(duì)不一定最難過(guò), 孤單不一定不快樂(lè), 得到不一定能長(zhǎng)久, 失去不一定不再擁有, 可能因?yàn)槟硞€(gè)理由而傷心難過(guò), 但我卻能找個(gè)理由讓自己快樂(lè).

          Google

          BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
            203 Posts :: 0 Stories :: 61 Comments :: 0 Trackbacks


            寫(xiě)一些關(guān)于PL/SQL的語(yǔ)法,免得等到用到的時(shí)候還要去亂翻。
            1。控制流程(if,while)
            2。循環(huán)(for)
            3。游標(biāo)(cursor)
            4。異常處理(exception)
            
            1。控制流程()
            
            A.條件語(yǔ)句
            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。循環(huán)
            
            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。游標(biāo)
            
            在PL/SQL程序中定義的游標(biāo)叫做顯式游標(biāo)。
            
            A.顯式游標(biāo)的處理由四個(gè)部分組成:
            cursor $cursorname is $Query;   --定義游標(biāo)
            open $cursorname;         --打開(kāi)游標(biāo)
            fetch $cursorname into $othervariable  --把游標(biāo)中的東西取出
            close $cursorname  --關(guān)閉游標(biāo)
            
            B.游標(biāo)屬性
            %found     布爾型屬性,當(dāng)最近一次讀紀(jì)錄成功時(shí),為true.
            %nofound                失敗時(shí),為false.
            %isopen
            %rowcount   返回已從游標(biāo)中讀取的記錄數(shù)。
            
            C.參數(shù)化游標(biāo)
            
            所有的SQL語(yǔ)句在上下文區(qū)內(nèi)部都是可執(zhí)行的,因此都有一個(gè)游標(biāo)指向上下文區(qū),此游標(biāo)就是所謂的SQL游標(biāo)。
            
            與顯式游標(biāo)不同,SQL游標(biāo)不被程序打開(kāi)和關(guān)閉。
            
            4.異常處理概念
            
            異常處理是用來(lái)處理正常執(zhí)行過(guò)程中未預(yù)料的事件。如果PL/SQL程序塊一旦產(chǎn)生異常而又沒(méi)有指出如何處理時(shí),程序會(huì)自動(dòng)終止。
            
            異常處理部分放在PL/SQL的后半部分,結(jié)構(gòu)為:
            
            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必須放在最后
            
            異常分為預(yù)定義和用戶(hù)定義兩種。
            
            用戶(hù)定義的異常是通過(guò)顯式使用RAISE語(yǔ)句來(lái)引發(fā)。如
            
            DECLARE
            e_TooManyStudents EXCEPTION; -- 類(lèi)型為Exception,用于指示錯(cuò)誤條件
            v_CurrentStudents NUMBER(3); -- HIS-101學(xué)生注冊(cè)當(dāng)前號(hào)
            v_MaxStudents NUMBER(3);   -- HIS-101學(xué)生注冊(cè)允許的最大號(hào)
            
            BEGIN
            /* 找出注冊(cè)學(xué)生當(dāng)前號(hào)和允許的最大號(hào) */
            
            SELECT current_students, max_students
            
            INTO v_CurrentStudents, v_MaxStudents
            
            FROM classes
            
            WHERE department = 'HIS' AND course = 101;
            
            /* 檢查學(xué)生的號(hào) */
            
            IF v_CurrentStudents > v_MaxStudents THEN
            
            /* 太多的學(xué)生注冊(cè),則觸發(fā)例外處理 */
            
            RAISE e_TooManyStudents;
            
            END IF;
            
            EXCEPTION
            
            WHEN e_TooManyStudents THEN
            
            /* 當(dāng)太多的學(xué)生注冊(cè),就插入信息解釋發(fā)生過(guò)錯(cuò)誤 */
            
            INSERT INTO log_table (info) VALUES ('History 101 has ' || v_CurrentStudents ||
            
            'students: max allowed is ' || v_MaxStudents);
            
            END;
            
            END;
            
            用戶(hù)定義的的異常處理
            
            可以使用RAISE_APPLICATION_ERROR來(lái)創(chuàng)建自己的錯(cuò)誤處理:
            
            RAISE_APPLICATION_ERROR(error_number,error_message,[keep_errors]);
            
            其中error_number是從-20000到-20999之間的參數(shù);error_message是相應(yīng)的提示信息,小于512字節(jié)。如:
            
            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; -- 班上學(xué)生的當(dāng)前號(hào)
            v_MaxStudents NUMBER;   -- 班上學(xué)生的最大號(hào)
            
            BEGIN
            /* 找出學(xué)生的當(dāng)前號(hào)和最大號(hào) */
            SELECT current_students, max_students
            INTO v_CurrentStudents, v_MaxStudents
            FROM classes
            WHERE course = p_Course
            AND department = p_Department;
            
            /* 確認(rèn)另外的學(xué)生是否有足夠的教室*/
            IF v_CurrentStudents + 1 > v_MaxStudents THEN
            RAISE_APPLICATION_ERROR(-20000, 'Can''t add more students to ' ||
            p_Department || ' ' || p_Course);
            END IF;
            
            /* 加一個(gè)學(xué)生在本班 */
            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 2005-11-28 21:03 konhon 優(yōu)華 閱讀(718) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): Oracle
          主站蜘蛛池模板: 茂名市| 建德市| 安丘市| 遵义县| 卫辉市| 长武县| 顺平县| 池州市| 龙口市| 金门县| 万载县| 闽侯县| 荥阳市| 凤台县| 阿城市| 黑龙江省| 溧阳市| 洞头县| 隆林| 云浮市| 灌南县| 南投市| 永川市| 调兵山市| 宝鸡市| 鄄城县| 桃园县| 尤溪县| 营山县| 武安市| 新泰市| 宜君县| 敦化市| 桃源县| 越西县| 西吉县| 黔东| 合阳县| 汉阴县| 盐源县| 陆良县|