命令 ACCEPT sql plus

Posted

技术标签:

【中文标题】命令 ACCEPT sql plus【英文标题】:Command ACCEPT sql plus 【发布时间】:2015-09-14 08:16:10 【问题描述】:

我对 sql plus 中的 ACCEPT 命令有疑问。我不知道我做错了什么 - 一直收到一个错误,上面写着:“遇到符号“..”当期待以下之一时:“ 任何人? 提前致谢。

select concat('poid_id: ',poid_id0) from przykladowa3 ;

set serveroutput ON;
declare
begin
DBMS_OUTPUT.PUT_LINE('Czy usuwamy? T/N');
end;
/
set scan on;
declare
mark char;
cursor cur is select * from przykladowa3;
rowtype cur%rowtype;
begin
ACCEPT mark char PROMPT 'Enter smth:  '
open cur;
  if (mark='T') THEN
    loop
        fetch cur into rowtype;
        exit when cur%notfound;
        delete from przykladowa3 where poid_id0=rowtype.poid_id0;
        DBMS_OUTPUT.PUT_LINE('Successfully removed: ' || rowtype.poid_id0);
        commit;
    end loop;  
  else 
        DBMS_OUTPUT.PUT_LINE('SOME TEXT');
  end if;
end;
/

错误:

ORA-06550: linia 6, kolumna 8:
PLS-00103: Encountered the symbol "MARK" when expecting one of the following:
:= . ( @ % ;

【问题讨论】:

能否附上错误信息? 你好代理5566。错误消息:ORA-06550: linia 6, kolumna 8: PLS-00103: 在期望以下之一时遇到符号“MARK”::=。 (@%; 首先你应该设置mark数据类型长度,例如char(1),你也是混合pl\sql和sqlplus代码。 pl\sql中没有ACCEPT这样的语句。 acceptSQLPlus 命令,而不是 PL/SQL 语句。你不能在 PL/SQL 中使用它 当然,我在 sql plus 中使用该命令。当我尝试运行我的脚本时,会出现该错误消息... 【参考方案1】:

ACCEPT 是一个 sqlplus 函数。不是 PL/SQL 的。所以你不能把它放在 pl/sql 范围内,因为解释器/引擎不会接受它。

/* sqlplus scope */
set serveroutput on
ACCEPT lastname CHAR FORMAT 'A20' PROMPT 'Enter employee lastname: ';

/*PLSQL engine */
begin
    dbms_output.put_line ('Variable is: &lastname');
end;
/

只需将接受移出 pl/SQL 范围(加上 sqlplus 与 sqlplus 变量一起使用,而不是 pl/sql)

【讨论】:

你好 Olafur,我正在使用 sqlplus,我从 sqlplus 行运行该脚本.. 对吗? 编辑。好的,我明白了 :) 非常感谢 Olafur!它有效 我可以将 ACCCEPT 命令中的变量放入 PL/SQL 代码中吗?例如在 if/else 语句中? @maciek2791:您可以在 PL/SQL 块中使用 accept,因为它不是有效的 PL/SQL 语句。 @maciek2791:是的,您可以在 PL/SQL 中引用“变量”(它实际上是一个替换字符串),正如 Olafur 的回答 (...'Variable is: &lastname') 中所展示的那样。

以上是关于命令 ACCEPT sql plus的主要内容,如果未能解决你的问题,请参考以下文章

SQL*Plus 禁用或跳过 ACCEPT PROMPT

SQL Plus 无法使用 Accept 将参数传递给我的存储过程

Oracle PL SQL 中的 ACCEPT 语句

SQL Fundamentals:替代变量(&,&&)以及DEFINE,UNDEFINE,ACCEPT指令

SQL注入(HTTP头介绍)

无法连接到 Docker 上的 SQL 数据库