今天在匯入一批資料到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位址,但是執行的時候卻並非那麼理想,因為這...