Oracle PL SQL 中的 ACCEPT 语句

van*_*d39 1 oracle sqlplus oracle-sqldeveloper

我是 PL SQL 的初学者。

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

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

DBMS_OUTPUT.PUT_LINE(lastname);  
END;
Run Code Online (Sandbox Code Playgroud)

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

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

Ale*_*ole 5

ACCEPT 是SQL*Plus 和 SQL Developer 客户端命令,而不是 PL/SQL 命令。要设置一个替代变量,你可以使用在一个匿名块有:

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

SET serveroutput on;

BEGIN
  DBMS_OUTPUT.PUT_LINE('&lastname');  
END;
/
Run Code Online (Sandbox Code Playgroud)

不过,在 SQL 中使用它会更常见:

select '&lastname' from dual;
Run Code Online (Sandbox Code Playgroud)

PL/SQL 并非设计为以交互方式使用,但不清楚您真正要做什么。


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

ACCEPT lastname CHAR FORMAT 'A20' DEFAULT 'dummy' PROMPT 'Enter employee lastname:  '
Run Code Online (Sandbox Code Playgroud)

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