2017-04-21 8 views
0

を収集し、私は自分でdata_objectを作りましたいくつかの部門の雇用者の私は2つのテーブルだveは:従業員と部門を、これは私のコードです:バルクSQL

DECLARE 
    enum_dname my_nt := my_nt(); 
PROCEDURE print_l IS 
    BEGIN 
     DBMS_OUTPUT.put_line('---------------------------------------------------------'); 
    FOR i IN 1..enum_dname.COUNT 
     LOOP 
     DBMS_OUTPUT.PUT_LINE(enum_dname(i)); 
     END LOOP; 
    END; 
BEGIN 
    SELECT COUNT(emp_id) as number_of, department_name 
    BULK COLLECT INTO enum_dname 
    FROM employees e, department d 
    WHERE e.department_id = d.department_id 
    GROUP BY department_name; 
    print_l; 
    END; 

そして、それは私にエラーを表示:PLS - 00306:

PUT_LINE

とPLの\ SQL:コールタイプで、引数の間違った番号は: ORA-00947:値が不十分です

ありがとうございました!

+1

が、それはすべきではない 'enum_dname(I).number_type'または' enum_dname(I).varchar_type'だけでなく 'enum_dname(I)の':あなたは、オブジェクトのコンストラクタを含める必要があります。あなたはそれを試しましたか? –

+0

@SudiptaMondal:私はあなたがそれを答えにするべきだと思います – Nitish

答えて

0

あなたには2つのエラーがあります。 @SudiptaMondalが指摘したように(and as here)、オブジェクトをput_line()に渡すことはできません。文字列の値を1つ渡す必要があります。文字列に変換するか、暗黙的に変換することもできます。したがって、ここでは次のようにすることができます。

DBMS_OUTPUT.PUT_LINE(enum_dname(i).varchar_type || ': ' || enum_dname(i).number_type); 

ただし、出力をフォーマットする必要があります。 dbms_outputをデバッグ以外の目的に使用すると、コードを使用している人が出力を有効にしているかどうかを制御できないため、一般的には良い考えではありません。しかし、これはこの運動には十分かもしれません。

ORA-00947の2番目の問題は、2つのスカラー変数をオブジェクトの集合に大量に収集しようとしているためです。

SELECT my_object(COUNT(emp_id), department_name) 
BULK COLLECT INTO enum_dname 
... 
+0

はいthath作品!ありがとう、あなたは素晴らしいです:) – Bopinko