2017-05-01 5 views
0

オブジェクトを作成しました。こんにちは、私はユーザーから値を取得することによってリストを作成しようとしています、私はplオブジェクトのタイプのSQLテーブルを使用している。挿入中にエラーが発生します

CREATE OR REPLACE TYPE o_list AS OBJECT (l_value1 VARCHAR(50), 
    l_value2 VARCHAR2(50), 
    l_value3 VARCHAR2(50)) 
/

私はそのオブジェクトでテーブルを作成しました。

CREATE OR REPLACE TYPE l_table AS TABLE of o_list 
/

次に、ユーザーから値を取得してテーブルに保存しようとしています。

DECLARE 
    list l_table; 
    limit NUMBER; 
    table_value1 VARCHAR2(50); 
    table_value2 VARCHAR2(50); 
    table_value3 VARCHAR2(50); 
BEGIN 
    limit := &limit; 

    IF limit > 0 THEN 

     FOR i IN 1..limit 
     LOOP 

      table_value1 := &value1; 
      table_value2 := &value2; 
      table_value3 := &value3; 

      INSERT INTO lIST VALUES (o_list(table_value1,table_value2,table_value3)); 
     END LOOP; 

    ELSE 
     DBMS_OUTPUT.PUT_LINE('PLEASE ENTER A VALID LIMIT FOR THE LIST'); 
    END IF; 

END; 
/

ここで、テーブルまたはビューが存在しないことを示すエラーが表示されます。

Enter value for limit: 1 
    old 9:  limit := &limit; 
    new 9:  limit := 1; 
    Enter value for value1: 'a' 
    old 16:  table_value1 := &value1; 
    new 16:  table_value1 := 'aaaaa'; 
    Enter value for value2: 'b' 
    old 17:  table_value2 := &value2; 
    new 17:  table_value2 := 'bbbbbb'; 
    Enter value for value3: 'c' 
    old 18:  table_value3 := &value3; 
    new 18:  table_value3 := 'cccccc'; 
      INSERT INTO lIST VALUES (o_list(table_value1,table_value2,table_value3)); 
         * 
    ERROR at line 20: 
    ORA-06550: line 20, column 14: 
    PL/SQL: ORA-00942: table or view does not exist 
    ORA-06550: line 20, column 2: 
    PL/SQL: SQL Statement ignored 
+0

あなたがテーブルを作成していない挿入コレクションタイプを作成しました。 2つの異なること。 –

答えて

0

"list"は、通常のSQLテーブルではなく、レコード(配列)のローカルPL/SQLテーブルです。

CREATE TABLE list OF l_table; 

または100%PL/SQLそれを維持するために:リストを拡張する拡張

1-

list l_table := l_table(); 

2 - 使用変数レコードのテーブルを初期化するSQLテーブルを作成しますそして、値

list.extend(); 
list(list.count) := o_list(table_value1,table_value2,table_value3); 
+0

ありがとうございます。それはうまくいった。 – prithvi

0
DECLARE 
    list l_table := l_table(); 
    limit NUMBER; 
BEGIN 
    limit := &limit; 

    FOR i IN 1..limit LOOP 
    list.EXTEND; 
    list(list.COUNT) := o_list(&value1, &value2, &value3); 
    END LOOP; 

    IF limit < 1 THEN 
    DBMS_OUTPUT.PUT_LINE('PLEASE ENTER A VALID LIMIT FOR THE LIST'); 
    END IF; 
END; 
/
+0

あなたの答えをありがとう、それは助けた – prithvi

+0

しかしforとifループが動作していません。なぜ私に説明することができますか – prithvi

関連する問題