【问题标题】:ACCEPT statement in Oracle PL SQLOracle PL SQL 中的 ACCEPT 语句
【发布时间】:2016-02-16 19:50:37
【问题描述】:

我是 PL SQL 的初学者。

我正在尝试使用 PL SQL ACCEPT 语句接受变量中的字符串。 这是代码 -

ACCEPT lastname CHAR FORMAT 'A20' PROMPT 'Enter employee lastname:  '
DECLARE
BEGIN

DBMS_OUTPUT.PUT_LINE(lastname);  
END;

我在 SQL Developer 中没有收到任何错误或输出。我无法理解我在这里缺少什么。

基本上,我要做的是从用户那里读取一个值(字符串),然后在我对表的查询中使用它。

【问题讨论】:

  • 您一定遇到了无效标识符错误...
  • 不。没有任何错误。

标签: oracle oracle-sqldeveloper sqlplus


【解决方案1】:

ACCEPT 是 SQL*Plus and SQL Developer client command,而不是 PL/SQL 命令。您正在设置一个替换变量,您可以在匿名块中 use 使用:

ACCEPT lastname CHAR FORMAT 'A20' PROMPT 'Enter employee lastname:  '

SET serveroutput on;

BEGIN
  DBMS_OUTPUT.PUT_LINE('&lastname');  
END;
/

在 SQL 中使用它会更常见:

select '&lastname' from dual;

PL/SQL 不是为交互使用而设计的,但不清楚您将真正做什么。


SQL Developer(至少是 4.1.3 版)似乎无法像处理 SQL*Plus 一样处理 format,这可能是一个错误。如果您按照问题所示使用 ACCEPT 并且上面的代码没有提示或脚本输出;日志窗格显示来自 Accept.java:341 的“严重”消息。如果您还提供默认值,它确实有效:

ACCEPT lastname CHAR FORMAT 'A20' DEFAULT 'dummy' PROMPT 'Enter employee lastname:  '

提示对话框中不显示默认值,如果您只是确定对话框,您的替换变量将包含该默认值 - 这是“如果未给出回复”的预期行为。如果您不想要默认值,那么您会有点卡住 - 指定 null 默认值(使用 '')也会收到同样严重的消息,这可能是相关的。

【讨论】:

  • 为什么我在 SQL Developer 中执行上述代码时什么都看不到?我想要做的是在一个变量中捕获用户的输入,然后在我的 SQL 语句的 where 子句中使用。
  • 我不知道。您是作为脚本运行还是作为语句运行?您需要为此编写脚本。您确定您有活动连接吗?
  • 尝试将其作为脚本和语句运行。 Oracle SQL Developer 只是说“任务​​在 ... 秒内完成”,但没有任何反应。我很确定我有一个活跃的连接。刚刚编辑了上面的问题。 (最后一行)
  • 我尝试删除 FORMAT 'A20' 并成功运行。谢谢。
  • 有趣,这是 SQL*Plus(允许格式)和 SQL Developer 之间的行为差​​异;奇怪的是它完全停止响应 - 怀疑这是一个错误而不是故意的。日志记录页面显示了对 validateDefaultAndFormat(Accept.java:341) 的引用。奇怪的是,如果您还提供默认值,它确实有效。
猜你喜欢
  • 2011-10-15
  • 1970-01-01
  • 1970-01-01
  • 2014-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-27
  • 2018-01-24
相关资源
最近更新 更多