2014-11-05 59 views
1

我想用来插入在sqlplus中有@符号的字符串,但是sqlplus读取字符串就像我试图打开一个.sql文件。有没有办法阻止sqlplus这样做。SQLPlus在字符串中使用符号@ @

set define off; 
DECLARE 
    test CLOB 
     := q'[ 

@font-face 
    {font-family:Wingdings; 
    panose-1:5 0 0 0 0 0 0 0 0 0;} 
@font-face 
    {font-family:"Cambria Math"; 
    panose-1:2 4 5 3 5 4 6 3 2 4;} 
@font-face 
    {font-family:Calibri; 
    panose-1:2 15 5 2 2 2 4 3 2 4;} 
@font-face 
    {font-family:Tahoma; 
    panose-1:2 11 6 4 3 5 4 4 2 4;} 
/* Style Definitions */ ]' ; 


BEGIN 

INSERT INTO SOME_TABLE 
VALUES(test) 


END; 
/
+0

有没有办法通过一个脚本来更改限制级别为3?这样它就会消除启动命令。然后将限制设置回默认值? – jay 2014-11-09 22:50:27

回答

-1

二手神谕报价运营商:q'[""]

0

可以使用SQL变量。

variable var VARCHAR(20); 
SQL> select "@!$$" into :var from dual; 

SQL> select * 
    2 from some_table 
    3 where some_table_name = :var; 

:VAR可以让你想插入

insert into some_table values (':var {font-family:"Cambria Math"; panose-1:2 4 5 3 5 4 6 3 2 4;}') 
+0

我更新了我的代码。我需要一些能够在一个脚本中完成所有功能而不必修改原始文本。 – jay 2014-11-05 17:11:21

0

有趣的字符串,我没有在sqlplus这个问题(在SQL * Plus:释放11.2.0.1.0生产):

SQL> set serveroutput on 
SQL> create table tmp1(x varchar2(100)); 

Table created. 

SQL> insert into tmp1 values ('@font-face {font-family:"Cambria Math"; panose-1: 
2 4 5 3 5 4 6 3 2 4;}'); 

1 row created. 

您可以设置一个转义字符:

SQL> set escape '\'; 
SQL> insert into tmp1 values ('\@456'); 

1 row created. 

这将插入@ 456

+0

我将我的代码更新为我正在尝试做的更准确的示例。我需要一些能够在一个脚本中完成所有功能而不必修改原始文本 – jay 2014-11-05 18:29:31

+0

@tbone - SQLPlus确实有一些奇怪的解析问题。例如,尝试创建一个只有字符“/”的字符串,它会打破匿名块。但是,我无法重现这个确切的问题。 Jeff - 你可以包含SQL * Plus和OS版本吗?这可能是一个特定于平台的错误。 – 2014-11-05 20:00:51

+0

sqlplus 10.2.0.1.0并赢得8.1。你正在运行哪些版本。 – jay 2014-11-05 20:29:35