2016-12-31 7 views
-3

Ich möchte Werte in einer Tabellenspalte (Spaltentyp ist Integer) einem Integer-Array zuweisen. Leider konnte ich nicht.SELECT INTO INTEGER ARRAY

--TYPE--

CREATE OR REPLACE TYPE ABILITY_ID_ARRAY IS VARRAY(100) OF INTEGER 

--DECLARE IN PROCEDURE

ABILITY_IDS ABILITY_ID_ARRAY; 

--STATEMENT--

SELECT ABILITY_FK INTO ABILITY_IDS 
FROM T_EDUCATION_ABILITY_REL 
WHERE EDUCATION_FK = edu_id; 

erhielt ich diesen Fehler:

[Error] ORA-00932 (16: 12): PL/SQL: ORA-00932: inconsistent datatypes: expected UDT got NUMBER

+0

welcher Typ ABILITY_FK und ABILITY_IDS - sieht aus wie einer ist eine Zeit und der andere eine Zahl. Überprüfen Sie auch Ihre Where-Klausel – DCR

+0

ABILITY_FK ist Ganzzahl, ABILITY_IDS ist Ganzzahl-Array referenziert TYPE ABILITY_ID_ARRAY –

+0

Warum "ABILITY_ID_ARRAY", wenn es ein generisches Array von ganzen Zahlen ist? (Abgesehen von der Grenze von 100. Gibt es eine Geschäftsregel für maximal 100 Fähigkeits-IDs, oder haben Sie gerade die Syntaxanforderung erfüllt und eine Zahl eingegeben, um sie kompilieren zu lassen? Wenn ja, machen Sie eine geschachtelte Tabelle statt einer varray.) –

Antwort

5

Sie müssen BULK COLLECT Klausel verwenden, um eine Ergebnismenge in einer Sammlungsvariablen zu speichern.

Bitte studieren Sie die Dokumentation von SELECT INTO Aussage: https://docs.oracle.com/database/121/LNPLS/selectinto_statement.htm#LNPLS01345 enter image description here

into_clause
With this clause, the SELECT INTO statement retrieves one or more columns from a single row and stores them in either one or more scalar variables or one record variable.


bulk_collect_into_clause
With this clause, the SELECT INTO statement retrieves an entire result set and stores it in one or more collection variables.


Die PL/SQL statament wie dies in Ihrem Fall aussehen sollte:

SELECT ABILITY_FK BULK COLLECT INTO ABILITY_IDS 
FROM T_EDUCATION_ABILITY_REL 
WHERE EDUCATION_FK = edu_id; 
+0

danke für die hilfe –

Verwandte Themen