Oracleに特殊文字'&'とスペースを挿入

4373 ワード

今日、Oracleにデータをインポートする際に、Toadがカスタム変数AMPに値を割り当てるよう求めているという質問に遭遇しました.最初は、データが一連のInsert文なのに、カスタム変数があるのではないかと悩んでいました.後でキーワードAMPを検索すると、挿入データに次のようなフィールドがあるからです.
http://xxx.com/3DX?uid=0676&sid=rt_060908
 
OracleはここのURLのパラメータコネクタ&をカスタム変数と見なしているので、変数AMPに値を割り当てるように要求します.テスト後、以下の3つの方法をまとめました.
方法1:挿入するSQL文の前にSet define offを付ける.元のSQL文とともに一括実行
SQL*PLUSでSQL>show allコマンドを実行すると、次のようなパラメータが見つかります.
......
concat "." (hex 2e)
copycommit 0
copytypecheck ON
define "&" (hex 26)
describe DEPTH 1 LINENUM OFF INDENT OFF
echo OFF
......

これはOracleでカスタム変数を識別するための設定です.SQL*PLUSで閉じます.   >  Set   define  OFF;
そしてインポートスクリプトを再度実行してOK!問題が解決する.
注意:TOADで実行する場合は、インポートするスクリプトの最初の行に前の文を加えてdefineを閉じることをお勧めします.そうしないと、2番目の特殊文字を含むスクリプトをインポートすると、エラーが発生します.SQL*PLUSで実行する場合は、一度だけdefine OFFを設定するだけで、後から連続してインポートできます.define ONを再設定するまで.
文を挿入します.
 > insert into AA (O,resvalue) values ('AA', 'S'||chr(38)||'P');

方法2:SQL文で'&'をchr(38)に置き換えます.chr(38)は'&'のASCIIコードであるためです.
> Select 'Tom' || chr(38) || 'Jerry' from dual

 
方法3:元の文字列を分割する
> Select 'Tom' || '&' || 'Jerry' from dual;

方法の1つが最も簡便で、効率も最も高いことがわかります.メソッド2は,関数を呼び出すプロセスがあるため,性能がやや劣る.方法3は文字列を2回接続する必要があり、効率が最悪です.
 
 
では、フィールドの内容に引用符が含まれている場合は、どのように挿入しますか?例:It's fine.この場合も3つの方法があります.
方法1:エスケープ文字の使用
  > Select 'test' || '''' from dual

注意:ここの''''の4つの引用符はどういう意味ですか?最初の文字列コネクタと最後の文字列コネクタは、異議なしです.では、2番目の「と3番目の」はどういう意味ですか.2番目の「エスケープ文字3番目」こそ私たちの本当の内容です
 
方法2:同じようにエスケープ文字を使うのは、ただ方式が違うだけです
  > Select 'test ''' from dual;

注意:ここで2番目、3番目の'は、上記の方法1で述べたエスケープ記号と本当の内容です.
 
方法3:SQLでは、chr(39)が'のASCIIコードであるため、'をchr(39)に置き換えます.
 > Select 'It' || chr(39) || 'fine' from dual;

 
 
原文住所:http://www.jb51.net/article/52135.htm
転載先:https://www.cnblogs.com/hzz521/p/5328423.html