2016-12-31 17 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 - 1つはdtatetime、もう1つは数字のようです。 – DCR

+0

ABILITY_FKは整数、ABILITY_IDSは参照される整数配列です。TYPE ABILITY_ID_ARRAY –

+0

整数の一般的な配列である場合はなぜ「ABILITY_ID_ARRAY」ですか? (100個の制限とは別に、最大100個の能力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

助けてくれてありがとう –