Oracle PL 中的 ACCEPT 语句 SQL

ACCEPT statement in Oracle PL SQL

我是 PL 初学者 SQL。

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

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

DBMS_OUTPUT.PUT_LINE(lastname);  
END;

我在 SQL Developer 中没有收到任何错误或输出。我不明白我在这里错过了什么。

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

ACCEPT 是一个 SQL*Plus and SQL Developer client command, not a PL/SQL command. You are setting a substitution variable, which you could 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 开发人员(至少版本 4.1.3)似乎无法像 SQL*Plus 那样处理 format,这可能是一个错误。如果您使用问题中所示的 ACCEPT 和上面的代码,则脚本没有提示或输出;日志记录窗格显示来自 Accept.java:341 的 'severe' 消息。如果您还提供默认值,它确实有效:

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

默认值不会显示在提示对话框中,如果您只是确定对话框,您的替换变量将包含该默认值 - 这是预期的行为 "if a reply is not given"。如果您不想要默认值,那么您会有点卡住 - 指定空默认值('')也会得到同样严重的消息,这可能是相关的。