Это будет сложно реализовать с помощью PL/SQL. Но мы могли бы использовать подстановочные переменные в SQL Plus.
Я создаю два sql-скрипта: первый — main.sql, а второй — 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
person
luolee.me
schedule
16.08.2013