2010-12-30 10 views
0

ストアドプロシージャを使用してテーブルを更新しようとしていますが、エラーが発生しています。理由を教えてください。これがコードです。SQLストアドプロシージャCursorを使用してテーブルを更新する

CREATE OR REPLACE Procedure UpdateItem 
    (ITEM_TYPE_NAME IN varchar2) 
IS 
    V_TABLE_NAME VARCHAR2(100); 
    V_R_TABLE_NAME VARCHAR2(100); 
    V_SQL_STMT  VARCHAR2(1000); 

    cursor c1 is 
    select C.RTARGETITEMID ||'#'||C.VERSIONID||'#'||trim(p.CREATEUSERID)||'#bsacm#CBR.CLLCT001# #/icmrm/ICMResourceManager#727665642020202020202020#2509.000000#9080#1#ICMNLSDB# #201#1#' as ITEM_REF, C.ITEMID as ITEM_ID 
    from V_TABLE_NAME C, V_R_TABLE_NAME R 
    where C.TIEFLAG = 0 and C.ITEMID=R.ITEMID; 


BEGIN 

select TABLE_NAME into V_TABLE_NAME 
from user_indexes 
where INDEX_NAME = (SELECT distinct c.INDEXNAME 
        FROM ICMSTNLSKEYWORDS k, ICMSTCOMPDEFS d, ICMSTTEXTINDEXES c 
        WHERE k.KEYWORDCLASS = 2 AND k.KEYWORDCODE = d.ITEMTYPEID AND d.COMPONENTTYPEID = c.COMPONENTTYPEID AND k.KEYWORDNAME = ITEM_TYPE_NAME); 

select TABLE_NAME into V_R_TABLE_NAME 
from user_constraints 
where CONSTRAINT_NAME in (select distinct R_CONSTRAINT_NAME 
          from user_constraints 
          where TABLE_NAME in (select TABLE_NAME 
               from user_indexes 
               where INDEX_NAME = (SELECT distinct c.INDEXNAME 
                    FROM ICMSTNLSKEYWORDS k, ICMSTCOMPDEFS d, ICMSTTEXTINDEXES c 
                    WHERE k.KEYWORDCLASS = 2 AND k.KEYWORDCODE = d.ITEMTYPEID AND d.COMPONENTTYPEID = c.COMPONENTTYPEID AND k.KEYWORDNAME=ITEM_TYPE_NAME))); 

open c1; 
fetch c1 into V_SQL_STMT; 
EXECUTE IMMEDIATE 'UPDATE V_TABLE_NAME set TIEFLAG = ''1'',TIEREF = c1.ITEM_REF WHERE ITEMID = ITEM.ITEM_ID'; 

commit; 

close c1; 

EXCEPTION 
WHEN OTHERS THEN 
     raise_application_error(-20001,'An error was encountered - '||SQLCODE||' -ERROR- '||SQLERRM); 
END; 

そして、これは誤りです:

Error(9,5): PL/SQL: SQL Statement ignored Error(10,28): PL/SQL: ORA-00942: table or view does not exist

+0

 EXECUTE IMMEDIATE 'UPDATE V_TABLE_NAME set TIEFLAG = ''1'',TIEREF = c1.ITEM_REF WHERE ITEMID = ITEM.ITEM_ID'; 

:私の知る限り、あなたが行を変更する必要が言うことができるように

エディタツールバーの "コードサンプル"ボタン({})をクリックすると、フォーマットや構文を強調表示することができます。 –

+0

実行するコードは何ですか?カーソルc1とは何ですか? –

答えて

0

V_TABLE_NAMEが可変であるとして、あなたはあなたの文字列変数を連結する必要があります。ここでは、システムに* V_TABLE_NAME *という名前のテーブルがあると仮定しています。 ** **テキストエディタでこれらの行をハイライトしてください、あなたがコードまたはXMLを投稿する場合

 
EXECUTE IMMEDIATE 'UPDATE '||V_TABLE_NAME||' set TIEFLAG = ''1'',TIEREF = c1.ITEM_REF WHERE ITEMID = ITEM.ITEM_ID'; 
+0

PL/SQL:SQL文が無視されるエラー(10,28):PL/SQL:ORA-00942:表またはビューは表示されません。存在する – user557458

関連する問題