简体   繁体   中英

Hi, I'm trying to create a list by getting values from the user, I have used pl SQL table of type object. but I'm getting errors while inserting

I created a object.

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

I created a table with that object.

CREATE OR REPLACE TYPE l_table AS TABLE of o_list 
/

then I'm trying to get values from the user and store it on the table.

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;
/

Now I'm getting an error showing that the table or view doesn't exist.

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

"list" is a local PL/SQL table of records( array) rather than a regular SQL table. to create an SQL table :

CREATE TABLE list OF l_table;

Or to keep it 100% PL/SQL:

1- initialize the table of records variable

list l_table := l_table();

2- use extend to extend the list and insert the values

list.extend();
list(list.count) :=  o_list(table_value1,table_value2,table_value3);
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;
/

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM