如何用pl/sql循环接受用户输入?

Kyl*_*yle 1 oracle plsql sqlplus oracle10g

我希望能够根据用户输入在表中插入可变数量的行?例如.

Please enter value, enter "done" when no more values: value 1
Please enter value, enter "done" when no more values: value 2
Please enter value, enter "done" when no more values: done

2 Rows inserted successfully.
Run Code Online (Sandbox Code Playgroud)

我不确定如何临时存储行,我不知道如何多次询问用户插入数据.pl/sql有数组吗?

谢谢

Ton*_*ews 9

正如其他人所说,仅PL/SQL不适用于此任务,您需要在顶部使用UI与最终用户进行交互.但是,如果您真的需要在SQL Plus中执行此操作,则可以使用我在此SO问题中描述的技术.

您需要创建2个SQL Plus脚本:

1)执行单个插入的脚本,此处称为script_insert.sql:

insert into t1 values ('&1.');
@main
Run Code Online (Sandbox Code Playgroud)

2)一个控制进程的脚本,这里称为main.sql:

accept selection prompt "Please enter value, enter 'done' when no more values: "

set term off verify off

column script new_value v_script

select case '&selection.'
       when 'done' then ''
       else '@script_insert &selection.'
       end as script
from dual;

set term on

@&v_script.
Run Code Online (Sandbox Code Playgroud)

现在在SQL Plus中你可以像这样运行它:

SQL> select * from t1;

no rows selected

SQL> @main
Please enter value, enter 'done' when no more values: 1
Please enter value, enter 'done' when no more values: 2
Please enter value, enter 'done' when no more values: 3
Please enter value, enter 'done' when no more values: done
SQL> select * from t1;

        N1
----------
         1
         2
         3
Run Code Online (Sandbox Code Playgroud)

让我重申,这表明可以做到,我不认为它是实现要求的好方法 - 除非它只是DBA或开发人员使用的临时工具.我绝不会将最终用户 SQL Plus作为UI!