sqlcl vs sqlplus pl / sql compatability

时间:2016-05-18 20:12:16

标签: oracle sqlplus sqlcl

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

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

小-匿名-Block.sql:

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

以脚本身份运行:

  

SQL> SET SERVEROUTPUT ON;

     

SQL> @小 - 匿名Block.sql;

     

这个匿名块在sqlcl中运行!

     

PL / SQL程序已成功完成。

但是运行ad-hoc:

  

SQL> BEGIN

     

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

     

3结束;

     

4 /

给出:

  

从命令行中的第1行开始出错 -

     

BEGIN

     

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

     

END; /

     

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

sqlcl似乎将“/”与块终止END结合在一起; 同样的命令在sqlplus中工作正常。

您能告诉我,如何在sqlcl中以交互方式运行匿名块?我从20160513获得了早期采用者版本.java 8.0_77。对于这个问题的道歉,如果它在sqlcl手册中,我在oracle sqlcl-page上找不到太多东西。

2 个答案:

答案 0 :(得分:3)

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

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

SQLcl session

答案 1 :(得分: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☘ >