PL/SQL: ORA-00932: inkonsistente Datentypen: erwartete UDT habe NUMMER
Ich bin Ausführung des PL/SQL-code für die Anzeige der Währung Code der fehlerhaften Buchung-Tabelle. Objekt-Typ und die Geschachtelte Tabelle Sammlungen verwendet werden.
Wenn der PL/SQL-code ausführen, wird der folgende Fehler generiert. Die entsprechende Zeile hervorgehoben ist in der PL/SQL-code-Abschnitt.
Fehlermeldung:
ORA-06550: line 27, column 11:
PL/SQL: ORA-00932: inconsistent datatypes: expected UDT got NUMBER
ORA-06550: line 27, column 4:
PL/SQL: SQL Statement ignored
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
Der code ist eingefügt unter:
DDL - Tabelle erstellen:
CREATE TABLE FAILEDRESERVATION
(
FAILEDRESERVATIONID NUMBER(18,0),
FK_TRANSACTIONID NUMBER(18,0),
DEBITRESERVATIONID NUMBER(18,0),
RESERVATIONTIME DATE,
RESERVATIONAMOUNT NUMBER(18,5),
CURRENCYCODE CHAR(3 BYTE),
AVAILABLEAMOUNT NUMBER(18,5)
);
ALTER TABLE FAILEDRESERVATION
ADD CONSTRAINT "PK_FAILEDRESERVATION" PRIMARY KEY ("FAILEDRESERVATIONID");
Objekt Typ:
CREATE OR REPLACE TYPE TYPE type_failedreservation AS OBJECT
(
FK_TRANSACTIONID NUMBER(18),
DEBITRESERVATIONID NUMBER(18),
RESERVATIONTIME DATE,
RESERVATIONAMOUNT NUMBER(18,5),
CURRENCYCODE CHAR(3),
AVAILABLEAMOUNT NUMBER(18,5)
);
DML:
INSERT INTO FAILEDRESERVATION (FAILEDRESERVATIONID,FK_TRANSACTIONID,DEBITRESERVATIONID,RESERVATIONTIME,RESERVATIONAMOUNT,CURRENCYCODE,AVAILABLEAMOUNT)
VALUES (289,2,1,to_date('07-MAR-16','DD-MON-RR'),20000,'USD',10000);
INSERT INTO FAILEDRESERVATION (FAILEDRESERVATIONID,FK_TRANSACTIONID,DEBITRESERVATIONID,RESERVATIONTIME,RESERVATIONAMOUNT,CURRENCYCODE,AVAILABLEAMOUNT)
VALUES (288,1,1,to_date('01-MAR-16','DD-MON-RR'),10000,'NOK',10000);
Geschachtelte Tabellen:
CREATE OR REPLACE TYPE type_failedreservation_coll as TABLE OF type_failedreservation;
CREATE OR REPLACE TYPE type_dbtrsid_coll AS TABLE OF NUMBER;
PL/SQL-Code:
DECLARE
P_FAILEDRESERVATION APPDATA.TYPE_FAILEDRESERVATION_COLL;
vdbtid_coll type_dbtrsid_coll := type_dbtrsid_coll();
BEGIN
SELECT TYPE_FAILEDRESERVATION(fk_transactionid,debitreservationid,reservationtime,reservationamount,currencycode,availableamount)
BULK COLLECT
INTO p_failedreservation
FROM failedreservation;
-- This is line 27
SELECT frs.debitreservationid
INTO vdbtid_coll
FROM TABLE(p_failedreservation) frs;
FOR v_iterate IN vdbtid_coll.FIRST..vdbtid_coll.LAST
LOOP
dbms_output.put_line('The currency code is: '||v_iterate);
END LOOP;
END;
Warum ist der code-Generierung dieser Fehler ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie erklärt
vdbtid_coll
als eine Sammlung geben, so müssen Sie bulk-sammeln in das auch:Mit dieser änderung:
Das ist nur geben Sie die index-Nummer in der Sammlung, obwohl, so denke ich nicht, dass es ist, was Sie wirklich wollen. Sie können zu wollen:
welche bekommt:
Sie nicht wirklich brauchen, das zweite select/Sammlung auf alle aber, die Sie tun können:
... für das gleiche Ergebnis. Obwohl ich nicht sicher bin, was die Relevanz der
debitreservationid
ist, dass die zweite Abfrage, da es den gleichen Wert (1) in beiden Zeilen.Sie versuchen, wählen Sie mehrere Zeilen in eine collection. Sie benötigen
BULK COLLECT INTO
anstatt nurINTO
.Ändern
Zu
und Sie wahrscheinlich wollen, dass die Ausgabe zu werden:
Allerdings könnte man es vereinfacht alle zu:
Versuchen casting vom Typ array ist auf seine Art wie folgt
bulk collect
. Ich habe geändert, die Antwort.PL/SQL: ORA-00932: inkonsistente Datentypen: erwartete UDT bekam CHAR
Können Sie diese Fehlermeldung erhalten, falls Sie schreiben-Typ-Tabelle an Stelle des Typs-Objekt, wenn
mit der BULK COLLECT ZU, ich Stand dieser Fehler coz ich habe so.
BEISPIEL:
Sorge sollte genommen werden, wenn Sie den Objekt-Typ und Tabelle geben Sie die Funktion.