Oracle SQL*Plus:禁用处理“@”(at 符号)元字符

Posted

技术标签:

【中文标题】Oracle SQL*Plus:禁用处理“@”(at 符号)元字符【英文标题】:Oracle SQL*Plus: disable processing of '@' (at sign) metacharacter 【发布时间】:2012-08-20 10:40:08 【问题描述】:

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

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

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 来禁用不需要的元字符处理。

【问题讨论】:

我的脚本在一个名为MYPKG.sql的文件中,我使用@MYPKG.sqlsqlplus运行它。 【参考方案1】:

有几种方法可以禁用 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 上标题为“限制选项”的部分。

分享和享受。

【讨论】:

我正在使用@ 命令运行脚本,所以在这里禁用和/或限制START 不是一个选项,抱歉。我只想阻止 sqlplus 解释 PL/SQL 源文件中的元字符。 @DaniloPiazzalunga - 你可以做的另一件事是使用 DBMS_UTILITY.EXEC_DDL_STATEMENT 来执行 CREATE PACKAGE 和 CREATE PACKAGE BODY 语句 - 但是你必须有一个 SQL 以外的接口加上做*that,这会让你回到你所面临的问题。【参考方案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.

【讨论】:

我明白了。星号符号* 阻止 SQL*Plus 解释 at 符号。谢谢!

以上是关于Oracle SQL*Plus:禁用处理“@”(at 符号)元字符的主要内容,如果未能解决你的问题,请参考以下文章

SQL Plus和PL/SQL

Oracle SQL*plus常用的命令和函数

Oracle中SQL*PLUS使用的一些技巧

oracle 的sql*plus问题

SQL*Plus 禁用或跳过 ACCEPT PROMPT

SQL PLUS 如何远程连接ORACLE数据库