Oracle PL SQL 中的 ACCEPT 语句
Posted
技术标签:
【中文标题】Oracle PL SQL 中的 ACCEPT 语句【英文标题】:ACCEPT statement in Oracle PL SQL 【发布时间】: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 中没有收到任何错误或输出。我无法理解我在这里缺少什么。
基本上,我要做的是从用户那里读取一个值(字符串),然后在我对表的查询中使用它。
【问题讨论】:
您一定遇到了无效标识符错误... 不。没有任何错误。 【参考方案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) 的引用。奇怪的是,如果您还提供默认值,它确实有效。以上是关于Oracle PL SQL 中的 ACCEPT 语句的主要内容,如果未能解决你的问题,请参考以下文章
Java 存储过程是不是比 Oracle 中的 PL/SQL 慢?