当斜杠定义为命令分隔符时,Oracle SQL * Plus多行注释?

时间:2016-02-17 17:27:48

标签: sql oracle maven sqlplus

当SQL命令分隔符设置为斜杠(/)时,是否可以使用SQL * Plus进行多行注释?

以下内容将引发错误:

/* ----------------------------------
 * Random comment
---------------------------------- */

错误消息为

/* ----------------------------------
 * Random comment
---------------------------------- *
[ERROR] java.sql.SQLSyntaxErrorException: ORA-00900: invalid SQL statement

显然,结束注释被解释为语句终止符。

我们在定义包时使用它:

create package Foo AS
  /* ----------------------------------
   * Bar returns baz
  ---------------------------------- */
  PROCEDURE Bar(baz OUT SYS_REFCURSOR)
  IS
  BEGIN
    OPEN baz FOR
    SELECT abc
      FROM ttt;
  END bar;
END Foo;
/

注意:我们实际上使用maven-sql-plugin来运行它,但我告诉它遵循SQL * Plus语法?

我们的POM设置如下:

<autocommit>true</autocommit>
<delimiter>/</delimiter>
<delimiterType>normal</delimiterType>
<orderFile>ascending</orderFile>
<onError>continue</onError>
<keepFormat>true</keepFormat>

1 个答案:

答案 0 :(得分:0)

SQL PLus允许评论,请参阅以下测试 但是你试图在包本身中创建一个过程定义,而不是在包体中创建一个过程定义,这可能是错误的原因。 包裹只能包含程序声明 过程定义必须在包体中。

SQL> create package Foo AS
  2    /* ----------------------------------
  3     * Bar returns baz
  4    ---------------------------------- */
  5    PROCEDURE Bar(baz OUT SYS_REFCURSOR);
  6  end;
  7  /

Package created.

SQL> create package body Foo As
  2    /* ----------------------------------
  3     * Bar returns baz
  4    ---------------------------------- */
  5    PROCEDURE Bar(baz OUT SYS_REFCURSOR)
  6    IS
  7    BEGIN
  8      OPEN baz FOR
  9      SELECT abc
 10        FROM ttt;
 11    END bar;
 12  END Foo;
 13  /

Package body created.