varSQL: = 'DECLARE
varOptionId NUMBER;
varXML XMLTYPE;
varHsCode VARCHAR2(200);
varHsCodeCount NUMBER;
varId NUMBER;
RVAL OBJ_RETURN:=OBJ_RETURN(NULL,NULL,NULL,NULL);
BEGIN
varXML:=:refXML;
varHsCode:= varXML.EXTRACT('/OBJECT/HsCodes/HsCode/text()').GETSTRINGVAL();
:out:=varHsCode;
END';
EXECUTE IMMEDIATE varSQL USING PXML,OUT varOut;
Dies gibt die folgenden Fehler:Passing ein XML in Immediate Execute
ORA-06550: Zeile 9, Spalte 15: PLS-00382: Ausdruck von falschem Typ ORA-06550 ist: Linie 9, Spalte 2: PL/SQL: Anweisung ignoriert ORA-06512: bei "BIZZXE_V2_SCH.SYSTEM_UTILITY", Zeile 225 06550. 00000 - "Zeile% s, Spalte% s: \ n% s" * Ursache: Normalerweise ein PL/SQL-Kompilierungsfehler * Aktion:
Ist es möglich, ein XML zu übergeben?
warum führen Sie es nicht direkt aus? – ibre5041
Keine Ahnung, warum Sie dafür dynamisches SQL verwenden sollten, aber Sie haben unescape einfache Anführungszeichen im varSQL-String-Wert, so dass ich überrascht bin, dass überhaupt kompiliert wird. Wir haben keinen Kontext. Können Sie also bestätigen, dass die Zeile 'EXECUTE IMMEDIATE' in Zeile 225 Ihres Pakethauptteils steht, und dies ist ein Laufzeitfehler, der beim Kompilieren des Pakets nicht angezeigt wird? –
Und ja, Sie können einen XMLType übergeben, nur mit einer Version des Codes mit einigen Fehlern behoben - fehlende Semikolon, falsche Zuordnung in der ersten Zeile, migrierte Anführungszeichen. Es wäre hilfreich, wenn Sie zeigen würden, was Sie tatsächlich ausführen, als einen vollständigen Codeblock, den wir ausführen können, um den angezeigten Fehler neu zu erstellen. Ist PXML tatsächlich XMLType oder varchar2/CLOB? Sie erhalten diesen Fehler, wenn es eine Zeichenfolge ist, also ziemlich sicher, dass das Problem ist. –