1

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

sqlcl 是引人注目的,但我很担心我错过了如何以交互方式运行匿名块。以下示例在保存为 Little-Anonymous-Block.sql 并通过 @Little-Anonymous-Block.sql 在 sqlcl 中运行时工作正常,但原始 pl/sql 失败并出现以下 PLS-00103。

小匿名块.sql:

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

作为脚本运行:

SQL> 设置服务器输出;

SQL> @Little-Anonymous-Block.sql;

这个匿名块在 sqlcl 中运行!

PL/SQL 过程成功完成。

但是临时运行:

SQL> 开始

2 DBMS_OUTPUT.PUT_LINE('这个匿名块在 sqlcl 中运行!');

3 结束;

4 /

给出:

从行开始的错误:命令中的 1 -

开始

DBMS_OUTPUT.PUT_LINE('这个匿名块在 sqlcl 中运行!');

结尾;/

PLS-00103:遇到符号“/”符号“/”被忽略。

sqlcl 似乎将“/”与块终止 END 连接起来;相同的命令在 sqlplus 中运行良好。

你能告诉我,如何在 sqlcl 中交互式运行匿名块?我从 20160513 获得了早期采用者版本。java 8.0_77。抱歉,如果它在 sqlcl 手册中,我在 oracle sqlcl-page上找不到太多内容。

4

2 回答 2

4

我发现您可以运行一个匿名块,exec但它有其局限性(例如,所有代码都在一行上)。 SQLcl 会话

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

在此处输入图像描述

于 2016-06-03T19:36:21.693 回答
2

这确实是一个错误。它应该在 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☘ >
于 2016-08-08T18:24:54.933 回答