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 OFF
和 SET SQLPREFIX OFF
来禁用不需要的元字符处理。
【问题讨论】:
我的脚本在一个名为MYPKG.sql
的文件中,我使用@MYPKG.sql
从sqlplus
运行它。
【参考方案1】:
有几种方法可以禁用 START 命令(包括 @ 和 @@ 命令)。
一种方法是在 PRODUCT_USER_PROFILE(实际上是 SYSTEM.PRODUCT_PRIVS 的同义词)中放置一个适当的条目。为此,请执行类似于
的 INSERTINSERT 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 符号)元字符的主要内容,如果未能解决你的问题,请参考以下文章