2010-12-30 10 views
0

Ich versuche, eine Tabelle mit gespeicherten Prozedur zu aktualisieren, aber es gibt einen Fehler aus, bitte erläutern, was der Grund ist. Dies ist der Code.SQL gespeichert Prozedur mit Cursor, um eine Tabelle zu aktualisieren

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; 

Und das ist der Fehler:

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

+0

Wenn Sie Code oder XML zu veröffentlichen, ** ** bitte diese Zeilen im Texteditor markieren und klicke auf den "code samples" button ({}) auf der editor toolbar, um ihn schön zu formatieren und zu markieren! –

+0

Was soll der Code tun? Worum geht es beim cursor c1? –

Antwort

0

Als V_TABLE_NAME ist eine Variable, müssen Sie die Variable in der Zeichenfolge verketten. Die Art, wie Sie es getan haben, geht davon aus, dass in Ihrem System eine Tabelle namens * V_TABLE_NAME * vorhanden ist.

Soweit ich sagen, können Sie die Zeile ändern müssen:

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

zu

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

Vielen Dank für Ihre Antwort, nach der Aktualisierung des Codes bekomme ich den folowin Fehler Fehler (9,5): PL/SQL: SQL-Anweisung ignoriert Fehler (10,28): PL/SQL: ORA-00942: Tabelle oder Sicht nicht existieren – user557458

Verwandte Themen