首页 文章

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

提问于
浏览
3

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

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;
/

错误(2,5):PLS-00103:遇到以下其中一项时遇到符号“DECLARE”:begin function pragma procedure子类型当前游标删除存在于外部语言之前符号“begin”替换为“DECLARE”继续 . 错误(10,8):PLS-00103:当遇到以下情况之一时遇到符号“文件结束”:(如果循环模式为空循环异常退出,则返回选择更新,同时使用<<继续关闭当前删除获取锁定插入打开回滚保存点设置sql执行提交forall合并管道清除

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

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

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

4 回答

  • 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;
    /
    

    请注意,不需要使用命名过程的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)
    
  • 1

    您可以删除声明以解决该ora错误

  • 0

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

    您可以做的最好的模拟是与表数据接口,让用户将数据插入表中并对其作出反应,或者使用高级队列(这几乎相同) .

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

  • 1

    这段代码只能在SQL * Plus中使用,不能用于生成存储过程!

    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;
    

    注意最后一个语句中的差异,其中最后一个替换变量在字符串中引用,以便PL / SQL语法正确接受 . 无论如何,正如我在你的问题的最后评论中告诉你的那样,这不是用户交互,而只是语句预处理的结果 . 每次输入不同的值时,RDBMS都会执行不同的源代码 .

    可能你要求使用“程序”并不意味着使用STORED程序(这是不可能的),但他们只是想要一个SQL * Plus脚本,要求澄清 .

相关问题