PL/SQL を使用して実装するのは困難ですが、SQL Plus で置換変数を使用することはできます。
2 つの SQL スクリプトを作成します。最初は main.sql で、もう 1 つは script_insert.sql です。
[oracle@db input]$ cat main.sql
accept colu prompt "Please enter value, enter 'done' when no more values: "
set term off verify off
column script new_value v_script
select case '&colu'
when 'done' then ''
else '@script_insert &colu'
end as script
from dual;
set term on
@&v_script.
[oracle@db input]$
[oracle@db input]$ cat script_insert.sql
insert into array_table values ('&1');
@main
[oracle@db input]$
次に、配列を使用する以外のテーブルを作成する必要があります。
SQL> create table array_table(colu varchar2(30));
Table created.
SQL>
これで、それを実行できます。
SQL> @main
Please enter value, enter 'done' when no more values: A
1 row created.
Please enter value, enter 'done' when no more values: B
1 row created.
Please enter value, enter 'done' when no more values: Hello
1 row created.
Please enter value, enter 'done' when no more values: "Hello World"
1 row created.
Please enter value, enter 'done' when no more values: done
SQL> select * from array_table;
COLU
------------------------------
A
B
Hello
Hello World
SQL>
PL/SQL のみがサポートしているため、配列以外のテーブルを使用する必要があります。また、ループ内で置換変数を使用しないでください。最後に、これを C/Python/Java でプログラムに実装してみませんか? そうすると、よりリラックスできます。
参照: SQLPlus または PL/SQL でメニューを作成する方法