PL/SQL:如何在程序中提示用户输入?

use*_*554 4 sql oracle plsql user-input procedure

这是一个关于我正在做的大型项目的一小部分的问题.我试过以下但我只是得到了下面的两个错误:

SET SERVEROUTPUT ON

CREATE OR REPLACE PROCEDURE HELLO AS
DECLARE
variable1 NUMBER(1);
variable2 CHAR(1);

BEGIN
DBMS_OUTPUT.PUT_LINE('Hello World');
variable1 := &please_enter_1_or_0;
variable2 := &please_enter_y_or_n;
END;
/
Run Code Online (Sandbox Code Playgroud)

错误(2,5):PLS-00103:当期望以下之一时遇到符号"DECLARE":begin function pragma procedure子类型类型当前游标删除存在于外部语言之前符号"begin"替换为"DECLARE"以继续.

错误(10,8):PLS-00103:当遇到以下情况之一时遇到符号"文件结束":(如果循环mod为空pragma引发返回选择更新,则使用
<< 开始大小写声明结束异常退出) 继续关闭当前删除获取锁定
插入打开回滚保存点设置sql执行提交forall合并管道清除

我们获得了如何标记代码的标记,对于本节,相关标准将是:"脚本是否使用过程?" 和"脚本是否提示正确/错误和团队/个人并正确处理提供的数据?".

项目摘要引用"开发一个提示RIGHT/WRONG的程序(使用&),然后更新表"(其中table是表的名称)

变量的目的是更新现有的记录属性.即如果用户选择1和n然后将记录中的空值更新为2.如果它是1则y然后更新为1,如果0和y/n则更新为0

APC*_*APC 6

PL/SQL是一种用于编写自治程序的语言.它不是为用户交互性而设计的.输入值作为参数传递.所以你的程序应该是这样的

CREATE OR REPLACE PROCEDURE HELLO
    (p1 in number
      , p2 in varchar2)
AS
    l_salutation varchar2(20) := 'Hello World';
BEGIN
    DBMS_OUTPUT.PUT_LINE(l_salutation);
    DBMS_OUTPUT.PUT_LINE('p1 = ' || p1);
    DBMS_OUTPUT.PUT_LINE('p2 = ' || p2);
END;
/
Run Code Online (Sandbox Code Playgroud)

请注意,不需要使用命名过程的DECLARE.AS和BEGIN之间的部分用于声明变量,正如我所做的那样l_salutation.

您可以在调用程序时为这些参数提供值.在SQL*Plus中它的工作方式如下:

SET SERVEROUTPUT ON

accept p1 prompt "please enter 1 or 0: "
accept p2 prompt "please enter Y or N: "

exec HELLO (:p1, :p2)
Run Code Online (Sandbox Code Playgroud)


Dav*_*dge 1

您无法在 PL/SQL 过程或包中直接从客户端接收消息。

要模拟这一点,您可以做的最好的事情就是与表数据进行交互,让用户将数据插入表中并对其做出反应,或者使用高级队列(这几乎是同一件事)。

或者,在调用过程时接受用户输入作为参数。