2014-11-05 58 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