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 中没有收到任何错误或输出。我无法理解我在这里错过了什么。
基本上,我想要做的是从用户那里读取一个值(字符串)并在我对表的查询中使用它。
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 '') 也会得到同样严重的消息,这可能是相关的。
| 归档时间: |
|
| 查看次数: |
11599 次 |
| 最近记录: |