<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流程控制語句(不給規(guī)則,不成方圓)

      [推薦]ORACLE PL/SQL編程詳解之

      PL/SQL流程控制語句(不給規(guī)則,不成方圓)

       

      ——通過知識(shí)共享樹立個(gè)人品牌。

       

       

      繼上篇:

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

       

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

       

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

       

       

       

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

       

            ORACLE PL/SQL編程之八:把觸發(fā)器說透 

       

      接下來再次介紹PL/SQL的基礎(chǔ)篇:PL/SQL流程控制語句,還望大家繼續(xù)支持與推薦~!


       

       

      本篇主要內(nèi)容如下:

      3.1  條件語句

      3.2  CASE 表達(dá)式

      3.3  循環(huán)

      3.4  標(biāo)號(hào)和GOTO

      3.5  NULL 語句


       

       

       

      介紹PL/SQL的流程控制語句包括如下三類:

       

      控制語句: IF 語句

      循環(huán)語句: LOOP語句, EXIT語句

      順序語句: GOTO語句, NULL語句

       

      3.1  條件語句

       

      IF <布爾表達(dá)式> THEN
        PL
      /SQL 和 SQL語句
      END IF;
      -----------------------
      IF <布爾表達(dá)式> THEN
        PL
      /SQL 和 SQL語句
      ELSE
        其它語句
      END IF;
      -----------------------
      IF <布爾表達(dá)式> THEN
        PL
      /SQL 和 SQL語句
      ELSIF 
      < 其它布爾表達(dá)式> THEN
        其它語句
      ELSIF 
      < 其它布爾表達(dá)式> THEN
        其它語句
      ELSE
        其它語句
      END IF;

       

       

      提示: ELSIF 不能寫成 ELSEIF

       

      1:

       

      DECLARE
          v_empno  employees.employee_id
      %TYPE :=&empno;
          V_salary employees.salary
      %TYPE;
          V_comment 
      VARCHAR2(35);
      BEGIN
         
      SELECT salary INTO v_salary FROM employees 
         
      WHERE employee_id = v_empno;
         
      IF v_salary < 1500 THEN
             V_comment:
      = '太少了,加點(diǎn)吧~!';
         ELSIF v_salary 
      <3000 THEN
            V_comment:
      = '多了點(diǎn),少點(diǎn)吧~!';
         
      ELSE
            V_comment:
      = '沒有薪水~!';
         
      END IF;
         DBMS_OUTPUT.PUT_LINE(V_comment);
         exception
           
      when no_data_found then
              DBMS_OUTPUT.PUT_LINE(
      '沒有數(shù)據(jù)~!');
           
      when others then
              DBMS_OUTPUT.PUT_LINE(sqlcode 
      || '---' || sqlerrm);        
      END;

       

       

      2:

       

      DECLARE
         v_first_name  
      VARCHAR2(20);
         v_salary 
      NUMBER(7,2);
      BEGIN
         
      SELECT first_name, salary INTO v_first_name, v_salary FROM employees
         
      WHERE employee_id = &emp_id;
         DBMS_OUTPUT.PUT_LINE(v_first_name
      ||'雇員的工資是'||v_salary);
         
      IF v_salary < 10000 THEN
            DBMS_OUTPUT.PUT_LINE(
      '工資低于10000');
         
      ELSE
            
      IF 10000 <= v_salary AND v_salary < 20000 THEN
               DBMS_OUTPUT.PUT_LINE(
      '工資在10000到20000之間');
            
      ELSE
               DBMS_OUTPUT.PUT_LINE(
      '工資高于20000');
            
      END IF;
         
      END IF;
      END;

       

       

      3:

      DECLARE
         v_first_name  
      VARCHAR2(20);
         v_hire_date DATE;
         v_bonus 
      NUMBER(6,2);
      BEGIN
         
      SELECT first_name, hire_date INTO v_first_name, v_hire_date FROM employees
         
      WHERE employee_id = &emp_id;
         
      IF v_hire_date > TO_DATE('01-1月-90'THEN
            v_bonus :
      = 800;
         ELSIF v_hire_date 
      > TO_DATE('01-1月-88'THEN
            v_bonus :
      = 1600;
         
      ELSE
            v_bonus :
      = 2400;
         
      END IF;
         DBMS_OUTPUT.PUT_LINE(v_first_name
      ||'雇員的雇傭日期是'||v_hire_date
                                          
      ||'、獎(jiǎng)金是'||v_bonus);
      END;

       

      3.2  CASE 表達(dá)式

       

      ---------格式一---------
      CASE 條件表達(dá)式
        
      WHEN 條件表達(dá)式結(jié)果1 THEN 
           語句段1
        
      WHEN 條件表達(dá)式結(jié)果2 THEN
           語句段2
        ......
        
      WHEN 條件表達(dá)式結(jié)果n THEN
           語句段n
        
      [ELSE 條件表達(dá)式結(jié)果]
      END;
      ---------格式二---------
      CASE 
        
      WHEN 條件表達(dá)式1 THEN
           語句段1
        
      WHEN 條件表達(dá)式2 THEN
           語句段2
        ......
        
      WHEN 條件表達(dá)式n THEN 
           語句段n
        
      [ELSE 語句段]
      END;

       

       

      4:

       

      DECLARE
        V_grade 
      char(1) := UPPER('&p_grade');
        V_appraisal 
      VARCHAR2(20);
      BEGIN
        V_appraisal :
      =
        
      CASE v_grade
          
      WHEN 'A' THEN 'Excellent'
          
      WHEN 'B' THEN 'Very Good'
          
      WHEN 'C' THEN 'Good'
          
      ELSE 'No such grade'
        
      END;
        DBMS_OUTPUT.PUT_LINE(
      'Grade:'||v_grade||'  Appraisal: '|| v_appraisal);
      END;

       

       

      5:

       

      DECLARE
         v_first_name employees.first_name
      %TYPE;
         v_job_id employees.job_id
      %TYPE;
         v_salary employees.salary
      %TYPE;
         v_sal_raise 
      NUMBER(3,2);
      BEGIN
         
      SELECT first_name,   job_id,   salary INTO
                v_first_name, v_job_id, v_salary
         
      FROM employees WHERE employee_id = &emp_id;
         
      CASE
            
      WHEN v_job_id = 'PU_CLERK' THEN
               
      IF v_salary < 3000 THEN v_sal_raise := .08;
               
      ELSE v_sal_raise := .07;
               
      END IF;
            
      WHEN v_job_id = 'SH_CLERK' THEN
               
      IF v_salary < 4000 THEN v_sal_raise := .06;
               
      ELSE v_sal_raise := .05;
               
      END IF;
            
      WHEN v_job_id = 'ST_CLERK' THEN
               
      IF v_salary < 3500 THEN v_sal_raise := .04;
               
      ELSE v_sal_raise := .03;
               
      END IF;
            
      ELSE
               DBMS_OUTPUT.PUT_LINE(
      '該崗位不漲工資: '||v_job_id);
         
      END CASE;
         DBMS_OUTPUT.PUT_LINE(v_first_name
      ||'的崗位是'||v_job_id
                                          
      ||'、的工資是'||v_salary
                                          
      ||'、工資漲幅是'||v_sal_raise);
      END;

       

       

       

       

      3.3  循環(huán)

       1.  簡(jiǎn)單循環(huán)

       

        LOOP
            要執(zhí)行的語句;
            
      EXIT WHEN <條件語句> --條件滿足,退出循環(huán)語句
        END LOOP;

       

       

       

      例 6.

       

      DECLARE
          
      int NUMBER(2) :=0;
      BEGIN
         LOOP
            
      int := int + 1;
            DBMS_OUTPUT.PUT_LINE(
      'int 的當(dāng)前值為:'||int);
            
      EXIT WHEN int =10;
         
      END LOOP;
      END;

       

       

      2.  WHILE 循環(huán)

      WHILE <布爾表達(dá)式> LOOP
          要執(zhí)行的語句;
      END LOOP;

       

       

       

       

      7.

       

       

      DECLARE 
        x 
      NUMBER :=1;
      BEGIN
         
      WHILE x<=10 LOOP
            DBMS_OUTPUT.PUT_LINE(
      'X的當(dāng)前值為:'||x);
             x:
      = x+1;
         
      END LOOP;
      END;

       

       

      3.  數(shù)字式循環(huán)

       

       

      [<<循環(huán)標(biāo)簽>>]
      FOR 循環(huán)計(jì)數(shù)器 IN [ REVERSE ] 下限 .. 上限 LOOP
        要執(zhí)行的語句;
      END LOOP [循環(huán)標(biāo)簽];

       

       

      每循環(huán)一次,循環(huán)變量自動(dòng)加1;使用關(guān)鍵字REVERSE,循環(huán)變量自動(dòng)減1。跟在IN REVERSE 后面的數(shù)字必須是從小到大的順序,而且必須是整數(shù),不能是變量或表達(dá)式??梢允褂?/span>EXIT 退出循環(huán)。

       

      8.

       

       

      BEGIN
         
      FOR int  in 1..10 LOOP
             DBMS_OUTPUT.PUT_LINE(
      'int 的當(dāng)前值為: '||int);
         
      END LOOP;
      END;

       

       

      例 9.

       

      CREATE TABLE temp_table(num_col NUMBER);

      DECLARE
          V_counter 
      NUMBER := 10;
      BEGIN
         
      INSERT INTO temp_table(num_col) VALUES (v_counter );
         
      FOR v_counter IN 20 .. 25 LOOP
            
      INSERT INTO temp_table (num_col ) VALUES ( v_counter );
         
      END LOOP;
         
      INSERT INTO temp_table(num_col) VALUES (v_counter );
         
      FOR v_counter IN REVERSE 20 .. 25 LOOP
            
      INSERT INTO temp_table (num_col ) VALUES ( v_counter );
         
      END LOOP;
      END ;

      DROP TABLE temp_table;

       

       

      10:

       

      DECLARE
         TYPE jobids_varray 
      IS VARRAY(12OF VARCHAR2(10); --定義一個(gè)VARRAY數(shù)據(jù)類型
         v_jobids JOBIDS_VARRAY; --聲明一個(gè)具有JOBIDS_VARRAY數(shù)據(jù)類型的變量
         v_howmany NUMBER--聲明一個(gè)變量來保存雇員的數(shù)量

      BEGIN
         
      --用某些job_id值初始化數(shù)組
         v_jobids := jobids_varray('FI_ACCOUNT''FI_MGR''ST_CLERK''ST_MAN');

         
      --用FOR...LOOP...END LOOP循環(huán)使用每個(gè)數(shù)組成員的值
         FOR i IN v_jobids.FIRST..v_jobids.LAST LOOP

         
      --針對(duì)數(shù)組中的每個(gè)崗位,決定該崗位的雇員的數(shù)量
            SELECT count(*INTO v_howmany FROM employees WHERE job_id = v_jobids(i);
            DBMS_OUTPUT.PUT_LINE ( 
      '崗位'||v_jobids(i)||
                             
      '總共有'|| TO_CHAR(v_howmany) || '個(gè)雇員');
         
      END LOOP;
      END;

       

       

      11 While循環(huán)中嵌套loop循環(huán)

      /*求100至110之間的素?cái)?shù)*/
      DECLARE
         v_m 
      NUMBER := 101;
         v_i 
      NUMBER;
         v_n 
      NUMBER := 0;
      BEGIN
         
      WHILE v_m < 110 LOOP
            v_i :
      = 2;
            LOOP
               
      IF mod(v_m, v_i) = 0 THEN
                  v_i :
      = 0;
                  
      EXIT;
               
      END IF;
          
               v_i :
      = v_i + 1;
               
      EXIT WHEN v_i > v_m - 1
            
      END LOOP;
            
            
      IF v_i > 0 THEN
               v_n :
      = v_n + 1;
               DBMS_OUTPUT.PUT_LINE(
      ''|| v_n || '個(gè)素?cái)?shù)是' || v_m);
            
      END IF;

            v_m :
      = v_m + 2;
         
      END LOOP;
      END;

       

      3.4  標(biāo)號(hào)和GOTO 

      PL/SQLGOTO語句是無條件跳轉(zhuǎn)到指定的標(biāo)號(hào)去的意思。語法如下:

       

      GOTO label;
      ......
      <<label>> /*標(biāo)號(hào)是用<< >>括起來的標(biāo)識(shí)符 */

       

       

      注意,在以下地方使用是不合法的,編譯時(shí)會(huì)出錯(cuò)誤。

      跳轉(zhuǎn)到非執(zhí)行語句前面。

      跳轉(zhuǎn)到子塊中。

      跳轉(zhuǎn)到循環(huán)語句中。

      跳轉(zhuǎn)到條件語句中。

      從異常處理部分跳轉(zhuǎn)到執(zhí)行。

      從條件語句的一部分跳轉(zhuǎn)到另一部分。

       

      12:

       

      DECLARE
         V_counter 
      NUMBER := 1;
      BEGIN
         LOOP 
           DBMS_OUTPUT.PUT_LINE(
      'V_counter的當(dāng)前值為:'||V_counter);
           V_counter :
      = v_counter + 1;
         
      IF v_counter > 10 THEN
             
      GOTO labelOffLOOP;
         
      END IF;
         
      END LOOP;
         
      <<labelOffLOOP>>
           DBMS_OUTPUT.PUT_LINE(
      'V_counter的當(dāng)前值為:'||V_counter);
      END;

       

       

      13:

      DECLARE
         v_i 
      NUMBER := 0;
         v_s 
      NUMBER := 0;
      BEGIN
         
      <<label_1>>
         v_i :
      = v_i + 1;
         
      IF v_i <= 1000 THEN
            v_s :
      = v_s + v_i;
            
      GOTO label_1;
         
      END IF;
         DBMS_OUTPUT.PUT_LINE(v_s);
      END;

       

      3.5  NULL 語句 

      PL/SQL 程序中,NULL語句是一個(gè)可執(zhí)行語句,可以用 null 語句來說明不用做任何事情的意思,相當(dāng)于一個(gè)占位符或不執(zhí)行任何操作的空語句,可以使某些語句變得有意義,提高程序的可讀性,保證其他語句結(jié)構(gòu)的完整性和正確性。如:

      14:

       

      DECLARE
          ...
      BEGIN
          ...
          
      IF v_num IS NULL THEN
          
      GOTO labelPrint;
          
      END IF;
        …
        
      <<labelPrint>>
        
      NULL--不需要處理任何數(shù)據(jù)。
      END;

       

       

      15:

       

      DECLARE
         v_emp_id employees.employee_id
      %TYPE;
         v_first_name employees.first_name
      %TYPE;
         v_salary employees.salary
      %TYPE;
         v_sal_raise 
      NUMBER(3,2);
      BEGIN
         v_emp_id :
      = &emp_id;
         
      SELECT first_name, salary INTO v_first_name, v_salary
         
      FROM employees WHERE employee_id = v_emp_id;
         
      IF v_salary <= 3000 THEN
            v_sal_raise :
      = .10;
            DBMS_OUTPUT.PUT_LINE(v_first_name
      ||'的工資是'||v_salary
                                             
      ||'、工資漲幅是'||v_sal_raise);
         
      ELSE
            
      NULL;
         
      END IF;
      END;

       

       

      posted @ 2011-05-13 13:23  .NET快速開發(fā)框架  閱讀(22465)  評(píng)論(6)    收藏  舉報(bào)
      主站蜘蛛池模板: 亚洲欧美日韩综合在线丁香| 日韩a∨精品日韩在线观看| 人人人澡人人肉久久精品| 欧洲精品久久久AV无码电影| 黑人巨茎大战欧美白妇| 日韩午夜福利视频在线观看| 高清有码国产一区二区| 日韩成人无码影院| 四虎亚洲国产成人久久精品| 日本边添边摸边做边爱| 中国少妇嫖妓BBWBBW| 最新亚洲av日韩av二区| 亚洲av综合久久成人网| 国产亚洲一二三区精品| 欧美牲交a欧美牲交aⅴ免费真| 92自拍视频爽啪在线观看| 最新成免费人久久精品| 91人妻无码成人精品一区91| 91久久亚洲综合精品成人| 成人福利国产午夜AV免费不卡在线| 乱中年女人伦av三区| 国产成人精品永久免费视频| 亚洲人成色777777老人头| 久久精品国产精品亚洲综合| 欧美巨大极度另类| 亚洲中文字幕无码中字| 欧美日本一区二区视频在线观看| 亚洲国产福利成人一区二区| 亚洲真人无码永久在线| 成人免费无码大片a毛片| 亚洲色欲色欱WWW在线| 安宁市| 国产gaysexchina男外卖| 成人无码午夜在线观看| 亚洲国产午夜福利精品| 波多野结衣久久一区二区| 国产精品第一页中文字幕| 亚洲中文字幕无码av永久| 日本亚洲一区二区精品久久| 久久天天躁狠狠躁夜夜2020老熟妇| 亚洲av永久无码天堂影院|