欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

2011-11-2游標和管道函數(shù)-創(chuàng)新互聯(lián)

/tupian/20230522/thread-1499223-11-1.html

創(chuàng)新互聯(lián)2013年開創(chuàng)至今,公司以成都做網(wǎng)站、網(wǎng)站制作、系統(tǒng)開發(fā)、網(wǎng)絡推廣、文化傳媒、企業(yè)宣傳、平面廣告設計等為主要業(yè)務,適用行業(yè)近百種。服務企業(yè)客戶超過千家,涉及國內(nèi)多個省份客戶。擁有多年網(wǎng)站建設開發(fā)經(jīng)驗。為企業(yè)提供專業(yè)的網(wǎng)站建設、創(chuàng)意設計、宣傳推廣等服務。 通過專業(yè)的設計、獨特的風格,為不同客戶提供各種風格的特色服務。

105樓

我創(chuàng)建了這張表并填入數(shù)據(jù):

CREATE TABLE plch_parts
(
   partnum    INTEGER PRIMARY KEY
, partname   VARCHAR2 (100) UNIQUE
)
/
BEGIN
   INSERT INTO plch_parts VALUES (1, 'Mouse');
   INSERT INTO plch_parts VALUES (100, 'Keyboard');
   INSERT INTO plch_parts VALUES (500, 'Monitor');
   COMMIT;
END;
/

我建立了如下的嵌套表類型和包說明:

CREATE OR REPLACE TYPE numbers_t IS TABLE OF NUMBER;
/
CREATE OR REPLACE PACKAGE plch_pipeline
IS
   CURSOR refcur_c
   IS
      SELECT line FROM user_source;
   TYPE refcur_t IS REF CURSOR
      RETURN refcur_c%ROWTYPE;
   FUNCTION double_values (dataset refcur_t)
      RETURN numbers_t
      PIPELINED;
END plch_pipeline;
/

下列的選項中哪些實現(xiàn)了包體,從而使得這個查詢執(zhí)行之后:

SELECT *
  FROM TABLE (plch_pipeline.double_values (
                CURSOR (SELECT line
                          FROM user_source
                         WHERE name = 'PLCH_PIPELINE'
                           AND type = 'PACKAGE'
                           AND line <= 3
                         ORDER BY line)))
/

這三行會顯示出來:

2
4
6

(A)

CREATE OR REPLACE PACKAGE BODY plch_pipeline
IS
   FUNCTION double_values (dataset refcur_t)
      RETURN numbers_t PIPELINED
   IS
      l_number   NUMBER;
   BEGIN
      LOOP
         FETCH dataset INTO l_number;
         EXIT WHEN dataset%NOTFOUND;
         UPDATE plch_parts SET partnum = partnum;
            
         PIPE ROW (l_number * 2);
      END LOOP;
      CLOSE dataset;
      RETURN;
   END;
END plch_pipeline;
/
SQL> SELECT *
  2    FROM TABLE (plch_pipeline.double_values (
  3                  CURSOR (SELECT line
  4                            FROM user_source
  5                           WHERE name = 'PLCH_PIPELINE'
  6                             AND type = 'PACKAGE'
  7                             AND line <= 3
  8                           ORDER BY line)))
  9  /
SELECT *
  FROM TABLE (plch_pipeline.double_values (
                CURSOR (SELECT line
                          FROM user_source
                         WHERE name = 'PLCH_PIPELINE'
                           AND type = 'PACKAGE'
                           AND line <= 3
                         ORDER BY line)))
ORA-14551: 無法在查詢中執(zhí)行 DML 操作
ORA-06512: 在 "YOGA.PLCH_PIPELINE", line 12
SQL>

(B)

CREATE OR REPLACE PACKAGE BODY plch_pipeline
IS
   FUNCTION double_values (dataset refcur_t)
      RETURN numbers_t PIPELINED
   IS
      PRAGMA AUTONOMOUS_TRANSACTION;
      l_number   NUMBER;
   BEGIN
      LOOP
         FETCH dataset INTO l_number;
         EXIT WHEN dataset%NOTFOUND;
         UPDATE plch_parts SET partnum = partnum;
         PIPE ROW (l_number * 2);
      END LOOP;
      CLOSE dataset;
      RETURN;
   END;
END plch_pipeline;
/
SQL> SELECT *
  2    FROM TABLE (plch_pipeline.double_values (
  3                  CURSOR (SELECT line
  4                            FROM user_source
  5                           WHERE name = 'PLCH_PIPELINE'
  6                             AND type = 'PACKAGE'
  7                             AND line <= 3
  8                           ORDER BY line)))
  9  /
SELECT *
  FROM TABLE (plch_pipeline.double_values (
                CURSOR (SELECT line
                          FROM user_source
                         WHERE name = 'PLCH_PIPELINE'
                           AND type = 'PACKAGE'
                           AND line <= 3
                         ORDER BY line)))
ORA-06519: 檢測到活動的獨立的事務處理, 已經(jīng)回退
ORA-06512: 在 "YOGA.PLCH_PIPELINE", line 15
SQL>

(C)

CREATE OR REPLACE PACKAGE BODY plch_pipeline
IS
   FUNCTION double_values (dataset refcur_t)
      RETURN numbers_t PIPELINED
   IS
      PRAGMA AUTONOMOUS_TRANSACTION;
      l_number   NUMBER;
   BEGIN
      LOOP
         FETCH dataset INTO l_number;
         EXIT WHEN dataset%NOTFOUND;
         UPDATE plch_parts SET partnum = partnum;
         PIPE ROW (l_number * 2);
      END LOOP;
      CLOSE dataset;
      COMMIT;
      RETURN;
   END;
END plch_pipeline;
/
SQL> SELECT *
  2    FROM TABLE (plch_pipeline.double_values (
  3                  CURSOR (SELECT line
  4                            FROM user_source
  5                           WHERE name = 'PLCH_PIPELINE'
  6                             AND type = 'PACKAGE'
  7                             AND line <= 3
  8                           ORDER BY line)))
  9  /
SELECT *
  FROM TABLE (plch_pipeline.double_values (
                CURSOR (SELECT line
                          FROM user_source
                         WHERE name = 'PLCH_PIPELINE'
                           AND type = 'PACKAGE'
                           AND line <= 3
                         ORDER BY line)))
ORA-06519: 檢測到活動的獨立的事務處理, 已經(jīng)回退
ORA-06512: 在 "YOGA.PLCH_PIPELINE", line 15
SQL>

(D)

CREATE OR REPLACE PACKAGE BODY plch_pipeline
IS
   FUNCTION double_values (dataset refcur_t)
      RETURN numbers_t PIPELINED
   IS
      PRAGMA AUTONOMOUS_TRANSACTION;
      l_number   NUMBER;
   BEGIN
      LOOP
         FETCH dataset INTO l_number;
         EXIT WHEN dataset%NOTFOUND;
         UPDATE plch_parts SET partnum = partnum;
         COMMIT;
         
         PIPE ROW (l_number * 2);
      END LOOP;
      CLOSE dataset;
      RETURN;
   END;
END plch_pipeline;
/
SQL> SELECT *
  2    FROM TABLE (plch_pipeline.double_values (
  3                  CURSOR (SELECT line
  4                            FROM user_source
  5                           WHERE name = 'PLCH_PIPELINE'
  6                             AND type = 'PACKAGE'
  7                             AND line <= 3
  8                           ORDER BY line)))
  9  /
COLUMN_VALUE
------------
           2
           4
           6
SQL>

答案說明在109樓

2011-11-2 答案D.
A: 在SQL中調(diào)用的函數(shù)不能有DML, 除非是自治事務;
B: 雖然用了自治事務,但是在返回之前(PIPE ROW 就是返回一行數(shù)據(jù))必須提交或回滾這個事務;
C: 雖然用了自治事務而且有COMMIT, 但是位置不對,COMMIT放在循環(huán)外面,這樣在返回(PIPE ROW)之前還是沒有提交。

分享題目:2011-11-2游標和管道函數(shù)-創(chuàng)新互聯(lián)
文章鏈接:http://chinadenli.net/article30/gcpso.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃定制網(wǎng)站App設計建站公司服務器托管用戶體驗

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司