PLS-00382: Ausdruck hat falschen Typ in Oracle-cursor
Ich geschrieben habe, einen cursor in oracle 11g wie folgt:
DECLARE CURSOR QnA_cursor IS
SELECT activity_id, question, answer
FROM TABLE1
WHERE question != 'surveyText'
ORDER BY activity_id, question;
cur_count INT := 1;
que NVARCHAR2(10);
ans NVARCHAR2(10);
sqlCommand NVARCHAR2(500);
RowCountVar INT;
BEGIN
FOR QueAns
IN QnA_cursor
LOOP
IF cur_count = 4 THEN cur_count := 1; END IF; /* We have only 3 questions for each activity_id */
que := 'question' || cur_count; /* question1, question2, question3 */
ans := 'answer' || cur_count; /* answer1, answer2, answer3 */
sqlCommand := 'UPDATE TABLE2 SET '||que||' = :1, '||ans||' = :2 WHERE activity_id = :3';
EXECUTE IMMEDIATE sqlCommand USING QueAns.question, QueAns.answer, QueAns.activity_id;
cur_count := cur_count + 1;
END LOOP;
END;
Dies ist das schema für TABLE1 und TABLE2:
Create table TABLE2(
ACTIVITY_ID NUMERIC(19,0),
QUESTION1 NVARCHAR2(2000),
ANSWER1 NVARCHAR2(2000),
QUESTION2 NVARCHAR2(2000),
ANSWER2 NVARCHAR2(2000),
QUESTION3 NVARCHAR2(2000),
ANSWER3 NVARCHAR2(2000)
)
Create table TABLE1(
ACTIVITY_ID NUMERIC(19,0),
QUESTION NVARCHAR2(2000),
ANSWER NVARCHAR2(2000)
)
Wenn ich versuche zu kompilieren es in sqldeveloper, ich erhalte folgenden Fehler in der Zeile, wo führe ich die dynamische Abfrage "AUSFÜHREN IMMMEDIATE':
PLS-00382: expression is of wrong type
Ich gespielt habe, um ihn herum eine Menge, aber konnte nicht herausfinden, der Grund. Die Daten-Typen sind die gleichen für die entsprechenden Spalten in der Tabelle. Können Sie mir bitte sagen, was ein problem sein kann?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ändern Sie den Datentyp des Objekts sqlCommand von in varchar2, NVARCHAR2. Execute immediate erwartet, varchar, varchar2 oder char. Unten angegebenen Code sollte funktionieren