sqlcl 与 sqlplus pl/sql 兼容性

sqlcl vs sqlplus pl/sql compatability

对于这个超轻量级的问题,我预先表示歉意,但在开始使用 sqlcl 作为 sqlplus 的潜在替代品时,我遗漏了一些东西。

sqlcl 很有说服力,但我很困扰,因为我不知道如何 运行 以交互方式进行匿名块。下面的示例在通过 @Little-Anonymous-Block.sql 在 sqlcl 中另存为 Little-Anonymous-Block.sql 和 运行 时工作正常,但原始 pl/sql 失败并显示以下内容PLS-00103.

小匿名-Block.sql:

BEGIN
  DBMS_OUTPUT.PUT_LINE('This anonymous-block ran in sqlcl!');
END;
/

运行 作为脚本:

SQL> SET SERVEROUTPUT ON;

SQL> @Little-Anonymous-Block.sql;

This anonymous-block ran in sqlcl!

PL/SQL procedure successfully completed.

但是 运行 宁特别:

SQL> BEGIN

2 DBMS_OUTPUT.PUT_LINE('This anonymous-block ran in sqlcl!');

3 END;

4 /

给出:

Error starting at line : 1 in command -

BEGIN

DBMS_OUTPUT.PUT_LINE('This anonymous-block ran in sqlcl!');

END;/

PLS-00103: Encountered the symbol "/" The symbol "/" was ignored.

sqlcl 似乎将“/”与块终止 END 连接起来; 相同的命令在 sqlplus 中工作正常。

你能告诉我,我如何在 sqlcl 中交互 运行 匿名块吗?我有 20160513 的早期采用者版本。java 8.0_77。对于这个问题,如果它在 sqlcl 手册中,我很抱歉,我在 oracle sqlcl-page.

上没有找到太多可以参考的地方

我发现您可以 运行 使用 exec 的匿名块,但这有其局限性(例如,所有代码都在一行上)。

据我所知,您发现的是一个错误。解决方法是用 . 结束你的块,然后用 / 执行缓冲区,如下所示:

这确实是一个错误。它应该在 OTN

的最新版本中得到修复
BARRY@orcl☘ >BEGIN
  2  DBMS_OUTPUT.PUT_LINE('This anonymous-block ran in sqlcl!');
  3  END;
  4  /

PL/SQL procedure successfully completed.

BARRY@orcl☘ >l
  1  BEGIN
  2  DBMS_OUTPUT.PUT_LINE('This anonymous-block ran in sqlcl!');
  3* END;
BARRY@orcl☘ >