Oracle SQL * Plus:禁用'@'(符号)元字符的处理

时间:2012-08-20 10:40:09

标签: oracle sqlplus

Oracle SQL * Plus将at符号@解释为run a SQL script的命令。

我有一个.sql脚本,其中包含评论中的@字符,例如:

create or replace package mypkg
as

  /*
    Procedure foo

    @param bar blah blah blah
  */
  procedure foo(bar varchar2);

end mypkg;
/

如何禁用at符号的处理?我已经在使用SET DEFINE OFFSET SQLPREFIX OFF来禁用不需要的元字符处理。

2 个答案:

答案 0 :(得分:4)

有几种方法可以禁用START命令(包括@和@@命令)。

一种方法是在PRODUCT_USER_PROFILE(实际上是SYSTEM.PRODUCT_PRIVS的同义词)中放置一个适当的条目。为此,执行类似于

的INSERT
INSERT INTO PRODUCT_USER_PROFILE
  (PRODUCT,     USERID, ATTRIBUTE, CHAR_VALUE)
VALUES
  ('SQL*Plus', 'DUMMY', 'START',   'DISABLED')

这要求您使用的用户ID在PRODUCT_USER_PROFILE上具有INSERT权限。

第二种方法是在启动SQL * Plus时使用参数为3的-RESTRICT选项。这可能更简单,但是您可能需要启用-RESTRICT 3禁用其他命令,例如SPOOL。有关详情,请参阅this page标题为“RESTRICT Option”的部分。

分享并享受。

答案 1 :(得分:2)

我多年来一直使用这种评论符号,所以我很惊讶这是一个问题。 我使用包“pldoc”http://sourceforge.net/projects/pldoc/?source=directory来生成文档。评论的标准方式是这样的(如javadoc):

create or replace package mypkg
as

  /**
  * Procedure foo
  * 
  * @param bar blah blah blah
  */
  procedure foo(bar varchar2);

end mypkg;
/

me@XE> @mypkg.sql

Package created.