簡體   English   中英

在游標中動態查詢%rowtype

[英]Dynamic query in Cursor for %rowtype

我需要創建一個記錄類型以包含上述查詢的結果集

V_SQL VARCHAR2(200) := 'SELECT T1.'||record_id||',T1.'||card_no||',T2.TEST_CARD_NO, T1.'||type_cc||' FROM '|| table_name||' T1 
                INNER JOIN TEST T2 ON 
                T2.ID = T1.'||record_id;

這樣我就可以在循環執行語句中使用t1 C_BRNGB_EXTRACT%ROWTYPE(在l_BRNGB_EXTRACT內部使用t2.col4%TYPE的另一列)

CREATE OR REPLACE PROCEDURE "GCCPMAINT"."FUNCTION_CURSOR"(table_name VARCHAR2,record_id VARCHAR2,card_no VARCHAR2,type_cc VARCHAR2)
AS
limit_in NUMBER:=100;
V_SQL VARCHAR2(200) := 'SELECT T1.'||record_id||',T1.'||card_no||',T2.TEST_CARD_NO, T1.'||type_cc||' FROM '|| table_name||' T1 
            INNER JOIN TEST T2 ON 
            T2.ID = T1.'||record_id;

  TYPE BRNGB_EXTRACT IS REF CURSOR;
  C_BRNGB_EXTRACT BRNGB_EXTRACT;
  TYPE BRNGB_EXTRACT1 IS TABLE OF C_BRNGB_EXTRACT%ROWTYPE;
  l_BRNGB_EXTRACT BRNGB_EXTRACT1;    

BEGIN

OPEN C_BRNGB_EXTRACT FOR V_SQL;

   LOOP
       FETCH C_BRNGB_EXTRACT BULK COLLECT INTO l_BRNGB_EXTRACT LIMIT limit_in;
               EXIT WHEN l_BRNGB_EXTRACT.COUNT = 0;
                           FORALL indx IN 1 .. l_BRNGB_EXTRACT.COUNT
        EXECUTE IMMEDIATE 'UPDATE table_name SET CARD_NO=:1 WHERE CARD_NO=:2 AND RECORD_ID=:3' USING l_BRNGB_EXTRACT(indx).test_card_no,l_BRNGB_EXTRACT(indx).CARD_NO,l_BRNGB_EXTRACT(indx).RECORD_ID;
END LOOP;
CLOSE C_BRNGB_EXTRACT;
COMMIT;
END;

對於上述存儲過程,出現以下錯誤

PLS-00320:此表達式類型的聲明不完整或格式不正確PL / SQL:忽略的項目PLS-00597:INTO列表中的表達式'L_BRNGB_EXTRACT'具有錯誤的PL / SQL類型:SQL語句被忽略PLS-00487:無效引用變量“ C_BRNGB_EXTRACT%ROWTYPE”

請幫我解決這個問題。

我有解決方案

 TYPE BRNGB_EXTRACT IS REF CURSOR;
  C_BRNGB_EXTRACT BRNGB_EXTRACT;
 -- TYPE BRNGB_EXTRACT1 IS TABLE OF C_BRNGB_EXTRACT%ROWTYPE;

  TYPE BRNGB_EXTRACT1 IS RECORD  (
  record_id varchar(30),
  card_no varchar(30),
  TEST_CARD_NO varchar(30)
  );
  type test_rec_arr is table of BRNGB_EXTRACT1 index by pls_integer;
  l_BRNGB_EXTRACT test_rec_arr;  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM