oracle插入特殊字元

2021-08-30 03:08:49 字數 1688 閱讀 5638

今天在匯入一批資料到oracle時,碰到了乙個問題:toad提示要給乙個自定義變數target賦值,一開始我很納悶,資料是一系列的insert語句,怎麼會有自定義變數呢?後來搜尋了一下關鍵字target發現,原來是因為在插入資料中有乙個欄位的內容如下:

oracle把這裡的url的引數連線符⌖當成是乙個自定義變數了,所以要求我給變數target賦值。怎麼辦呢?方法有三:

·方法一:在要插入的sql語句前加上set define off;與原sql語句一起批量執行

我們在sql*plus下執行 sql> show define;命令時,顯示下列結果:

define "&" (hex 26)

這個是oracle裡面用來識別自定義變數的設定,現在我們在sql*plus下將其關閉:

sql> set define off;

然後再在sql*plus執行匯入指令碼,ok!問題搞定。

執行完畢之後,重新設定set define on。

·方法二:在sql語句中將'&'替換成chr(38),因為chr(38)是『&』的ascii碼

sql> select 'tom' || chr(38) || 'jerry' from dual;

·方法三:分拆原來的字串

sql> select 'tom' || '&' || 'jerry' from dual;

我們可以看到,方法一最為簡便,而且效率也最高。方法二因為有乙個呼叫函式的過程,所以效能稍差。方法三需要兩次連線字串,效率最差!

那麼如果欄位的內容中包含了單引號要怎麼插入呢?例如:it's fine。方法同樣有三

·方法一:使用轉義字元

sql > select 'test' || '''' from dual;

注意:這裡的''''四個單引號是什麼意思呢?首先第乙個和最後乙個都是oracle中的字串連線符,這個沒有異議。那麼第二個'和第三'又表示什麼意思呢?第二個'是乙個轉義字元

第三個'才是我們真正的內容

·方法二:同樣是使用轉義字元,只不過方式不同而已

sql > select 'test ''' from dual;

注意:這裡的第二個,第三個'就是我們上面方法一中提到的轉義符和真正的內容

·方法三:在sql中將'替換成chr(39),因為chr(39)是'的ascii碼

sql > select 'it' || chr(39) || 'fine' from dual;

查詢字母對應的ascii碼:

select ascii('&') from dual;

select chr(38) from dual;

也可以改變自定義變數的連線符:

set define '*';

在對define進行設定完成插入時,也可以使用escape來實現。

sql> show escape;

escape off

sql> set escape on;

sql> show escape;

escape "\" (hex 5c)

sql> insert into t values(1,'this is a \&test');

已建立 1 行。

sql> select * from t;

t1 t2

---------- -----------------

1 this is a &test

oracle插入特殊字元 問題

在初始化資料庫資料時,遇到了插入特殊字元的問題,例如有一選單表 id,name,url。插入資料 insert into menu values 1 產品型別 producttype.do?method list type 01 由於有特殊字元 故toad報錯 提示請輸入typepcode 原因是 ...

Oracle如何插入特殊字元 和

今天在匯入一批資料到oracle時,碰到了乙個問題 toad提示要給乙個自定義變數amp賦值,一開始我很納悶,資料是一系列的insert語句,怎麼會有自定義變數呢?後來搜尋了一下關鍵字amp發現,原來是因為在插入資料中有乙個欄位的內容如下 oracle把這裡的url的引數連線符 當成是乙個自定義變數...

oracle 特殊字元插入或更新

特殊字元如 例如向資料庫中插入url位址 在plsql裡邊執行 update userinfo set pageurl myjsp?page 1 pagesize 10 where id test 這條sql語句往資料庫的pageurl欄位放進去了乙個url位址,但是執行的時候卻並非那麼理想,因為這...