隨筆-0  評論-1  文章-13  trackbacks-0
          1.塊結構:
          PL
          /SQL程序被分割為稱為塊(block)的結構,塊中包含PL/SQL程序語句。典型的PL/SQL塊具有
          以下的結構:
          [DECLARE
              declaration_statements 
          ]
          BEGIN
              executable_statements
          [EXCEPTION
              exception_handling_statements
          ]
          END;
          語法元素:
          declaration_statement : 
            聲明了在塊的其余部分中使用的變量。這些變量是塊的局部變量。
          executable_statment:
            塊的實際可執(zhí)行語句。
          exeception_handling_statement:
            處理可執(zhí)行語句可能發(fā)生的錯誤。

          注意:每條語句都要有(;)分號結尾,塊使用END關鍵字結尾。

          例程:
          DECLARE
              width 
          INTEGER :=2;
              height 
          INTEGER ;
              area 
          INTEGER ;
          BEGIN
              height :
          =3 ;
              area :
          =width*height ;
              DBMS_OUTPUT.PUT_LINE(
          'Area='||area); //表示在屏幕上顯示;
          END;
          /   //表示執(zhí)行這個PL/SQL塊;

          注意:必須在SQL
          *PLUS中提前輸入:SET SERVEROUTPUT ON 才能顯示的輸出。

          2.變量類型:
          變量名   變量類型 ;
          / : = [初始數(shù)值] ;
            id   
          INTEGER ;
          name   
          VARCHAR2(20) :='BinMing';

            
          * proname product.price%TYPE ; // (%TYPE) 表示proname 的類型要和product表中的price的類型一致。

          3.條件邏輯:
          1.IF [條件1] THEN
              
          [語句段]
            ELSEIF 
          [條件2] THEN
                .
          .
          .
            
          END IF ;


          2.循環(huán)(簡單循環(huán)/WHILE/FOR)
            單循環(huán):
          LOOP 
            statements
          END LOOP;
          //一直循環(huán)語句段,除非顯示的輸入EXIT / EXIT WHEN 語句結束循環(huán)
                
            WHILE循環(huán):
          WHILE condition LOOP
              statements
          END LOOP;

          example:
            
          count:=0;
            
          WHILE counter<6 LOOP 
              
          count :=count + 1 ;
            
          END LOOP ;

          3.FOR循環(huán):
          FOR loop_variable IN [REVERSE] lower_bound..upper_bound LOOP
            statements;
          END LOOP;

          example:
            
          FOR id IN 3..6 LOOP
            DBMS_OUTPUT.PUT_LINE(id);
            
          END LOOP;


          4.游標的使用:

          步驟一: 聲明變量來存儲例值 :

          DECLARE
            id products.id
          %TYPE;
            
            

          步驟二: 聲明游標 :

          游標要放在聲明部分中。

          CURSOR product_cursor IS   
            
          Select 
            id,name,price
            
          FROM
            products
            
          ORDER BY
            id;

                  
          //聲明了游標的類型或著說方法

          步驟三:打開游標 :
          使用OPEN語句打開游標,必須放在塊的可執(zhí)行部分中。

            
          OPEN product_cursor ;

          步驟四: 從游標中獲取行:
          使用 
          FETCH 語句讀取游標中的行:
            
          FETCH:
            product_cursor;
            
          INTO
            id,name,price;   
          //把值存儲到上面聲明的三個變量中.
          // 如果游標返回可能包含很多行的話,就要循環(huán)取出每一行數(shù)據(jù),
            可以使用product_cursor
          %NOTFOUND決定虛幻何時結束。

          步驟五: 關閉游標:
          CLOSE product_cursor;

          5.過程:
              使用PL
          /SQL創(chuàng)建包含一組SQL語句和PL/SQL語句的過程。
              可以使用這些過程將業(yè)務邏輯集中在數(shù)據(jù)庫中,訪問數(shù)據(jù)
              庫的任何程序都可以使用這些過程。

              使用Create 
          PROCEDURE 語句創(chuàng)建PL/SQL過程:
          Create[OR REPLACE] PROCEDURE procedure_name     //過程名字
          [(parameter_name)[IN|OUT|IN OUT] type[])] //過程使用的參數(shù)
          {
          IS|AS}
          {
            body
          };

          .
          IN 參數(shù)的默認模式。如果在過程運行時參數(shù)以有一個值,而且這個值在過程體中不能修改,
            那么就應該指定這種模式。
          .OUT 如果參數(shù)的值只在過程體中設置,那么就應該指定這種模式。
          .
          IN OUT 如果在過程被調(diào)用時參數(shù)可能已經(jīng)有一個值,但是這個值可以在過程體中修改,那
          么就應該指定這種模式。


          例子程序:
          Create PROCEDURE update_product_price(

            p_product_id 
          IN products.id%TYPE ;
            p_factor   
          IN NUMBER ;
            
            ) 
          AS

            product_count 
          INTEGER ;

            
          BEGIN 
            
          Select 
            
          COUNT(*)
            
          INTO
            product_count
            
          FROM 
            products
            
          Where
            id 
          = p_product_id;

            
          IF product_count = 1 THEN
            
          Update
                products
            
          SET
                price 
          = price * p_factor ;
            
          COMMIT ;
            
          END IF ;

            
          END update_product_price ;
            
          /
          posted on 2008-06-06 18:50 飛行魚 閱讀(234) 評論(0)  編輯  收藏 所屬分類: Oracle

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


          網(wǎng)站導航:
           
          主站蜘蛛池模板: 高雄县| 池州市| 灵璧县| 玛多县| 北流市| 浦城县| 岳普湖县| 曲松县| 慈溪市| 澄江县| 从江县| 台南县| 辽宁省| 琼海市| 赤城县| 防城港市| 平江县| 鲁甸县| 金阳县| 五峰| 区。| 随州市| 平顶山市| 阿巴嘎旗| 改则县| 新田县| 鄂尔多斯市| 巨鹿县| 普定县| 枣庄市| 侯马市| 广汉市| 青浦区| 会宁县| 远安县| 新源县| 通州市| 平湖市| 株洲县| 通许县| 庆云县|