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

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

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.

我不确定如何临时存储行,也不确定如何多次要求用户插入数据。 pl/sql有数组吗?

谢谢

最佳答案

正如其他人所说,仅靠 PL/SQL 不适合这项任务,您需要一个顶部的 UI 来与最终用户交互。但是,如果您确实需要在 SQL Plus 中执行此操作,则可以使用我在 this SO question 中描述的技术。 .

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

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

insert into t1 values ('&1.');
@main

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.

现在在 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

让我重申一下,这表明它可以完成,我不会声称它是实现需求的好方法 - 除非它只是供 DBA 或开发人员使用的临时工具。我永远不会给最终用户 SQL Plus 作为用户界面!

https://stackoverflow.com/questions/1870670/

相关文章:

perl - 我如何检查一个值是否在 Perl 的列表中?

sql - 如何从 SQL Server 数据库可视化 nvarchar(max) 的值,其中 ma

objective-c - 将 IOKit IOReturn 错误代码映射到字符串

python - python中的文本压缩

php - eval {php} 条件

xml - 对齐 ="right"在 XML 中不起作用

sql-server - UPDATE 表中除 TOP 1 记录外的记录

sql-server - 在数据库中存储 & 符号

php - preg_replace : how do I strip off all white

c# - 通过鼠标移动控件