2016-12-31 127 views
-3

我想將表列中的值(列類型是整數)賦值給整型數組。不幸的是我不能。SELECT INTO INTEGER ARRAY

--TYPE--

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

--DECLARE手續

ABILITY_IDS ABILITY_ID_ARRAY; 

--STATEMENT--

SELECT ABILITY_FK INTO ABILITY_IDS 
FROM T_EDUCATION_ABILITY_REL 
WHERE EDUCATION_FK = edu_id; 

我收到此錯誤:

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

+0

什麼類型的ABILITY_FK和ABILITY_IDS - 看起來像一個是dtatetime,另一個是數字。還請檢查您的where子句 – DCR

+0

ABILITY_FK是整數,ABILITY_IDS是整數數組引用TYPE ABILITY_ID_ARRAY –

+0

爲什麼「ABILITY_ID_ARRAY」是一個泛型數組? (除了100的限制,是否有一些關於最多100個Ability ID的業務規則,或者你是否按了語法要求並鍵入一個數字來讓它進行編譯?如果是這樣,請將其設置爲嵌套表格而不是varray。) –

回答

5

您需要使用BULK COLLECT子句將結果集存儲到集合變量中。

請研究SELECT INTO聲明的文檔: 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.


的PL/SQL statament應該是這樣的,你的情況:

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

感謝您的幫助 –