这是一个关于我正在做的大型项目的一小部分的问题 . 我尝试了以下但我只是得到了下面的两个错误:
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 回答
PL / SQL是一种用于编写自治程序的语言 . 它不是为用户交互性而设计的 . 输入值作为参数传递 . 所以你的程序应该是这样的
请注意,不需要使用命名过程的DECLARE . AS和BEGIN之间的部分用于声明变量,就像我使用
l_salutation
一样 .您可以在调用程序时为这些参数提供值 . 在SQL * Plus中,它将像这样工作:
您可以删除声明以解决该ora错误
您无法在PL / SQL过程或包中直接从客户端接收消息 .
您可以做的最好的模拟是与表数据接口,让用户将数据插入表中并对其作出反应,或者使用高级队列(这几乎相同) .
或者,在调用过程时接受用户输入作为参数 .
这段代码只能在SQL * Plus中使用,不能用于生成存储过程!
注意最后一个语句中的差异,其中最后一个替换变量在字符串中引用,以便PL / SQL语法正确接受 . 无论如何,正如我在你的问题的最后评论中告诉你的那样,这不是用户交互,而只是语句预处理的结果 . 每次输入不同的值时,RDBMS都会执行不同的源代码 .
可能你要求使用“程序”并不意味着使用STORED程序(这是不可能的),但他们只是想要一个SQL * Plus脚本,要求澄清 .