熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

學在oracle數據庫中插入特殊符號

2013-11-13 22:22:04  來源: Oracle 

  oracle 特殊字符的插入
  
  環境配置:
  
  server:linux
  
  db server: oracle
  
  client os:windows pro
  
  oracle client: oracle i
  
  今天一個同事運行腳本向數據庫中插入數據數據的格式如下:
  
  SQL> ed
  
  已寫入文件 afiedtbuf
  
  * insert into dept values(Jackey&&jjjddHZ);
  
  SQL> /
  
  輸入 jjjdd 的值: dd
  
  原值 : insert into dept values(Jackey&&jjjddHZ);
  
  新值 : insert into dept values(JackeyddHZ);
  
  insert into dept values(JackeyddHZ);
  
  *
  
  ERROR 位於第 行:
  
  ORA: invalid character
  
  結果發現到數據庫中的數據和插入的數據不一致主要表現是在插入的字符串的中如果包括了&
  
  則&後面的字符就會丟失
  
  後來發現了造成這種情況的原因因為&在sqlplusw中被定義為自定義變量標示符合因此&
  
  符合後面的字符自然被解析為變量名字因為沒有輸入變量的值所以&後面的內容被認為是空的了
  
  於是我檢查了一下session中的設置發現
  
  
  
  已用時間: : :
  
  SQL> show all
  
  appinfo為OFF並且已設置為SQL*Plus
  
  arraysize
  
  autocommit OFF
  
  autoprint OFF
  
  autorecovery OFF
  
  autotrace OFF
  
  blockterminator (hex e)
  
  btitle OFF and 為下一條 SELECT 語句的前幾個字符
  
  cmdsep OFF
  
  colsep
  
  compatibility version NATIVE
  
  concat (hex e)
  
  copycommit
  
  COPYTYPECHECK 為 ON
  
  define OFF
  
  describe DEPTH LINENUM OFF INDENT ON
  
  echo OFF
  
  editfile afiedtbuf
  
  embedded OFF
  
  escape OFF
  
  用於或更多行的 FEEDBACK ON
  
  flagger OFF
  
  flush ON
  
  heading ON
  
  headsep | (hex c)
  
  instance local
  
  linesize
  
  lno
  
  loboffset
  
  logsource
  
  long
  
  longchunksize
  
  markup HTML OFF HEAD <style type=text/css> body {font:pt Ar
  
  newpage
  
  null
  
  numformat
  
  numwidth
  
  pagesize
  
  PAUSE 為OFF
  
  pno
  
  recsep WRAP
  
  recsepchar (hex )
  
  release
  
  repfooter OFF and 為 NULL
  
  repheader OFF and 為 NULL
  
  serveroutput OFF
  
  shiftinout INVISIBLE
  
  showmode OFF
  
  spool OFF
  
  sqlblanklines OFF
  
  sqlcase MIXED
  
  sqlcode
  
  sqlcontinue >
  
  sqlnumber ON
  
  sqlpluscompatibility
  
  sqlprefix # (hex )
  
  sqlprompt SQL>
  
  sqlterminator ; (hex b)
  
  suffix sql
  
  tab ON
  
  termout ON
  
  time OFF
  
  timing ON
  
  trimout ON
  
  trimspool OFF
  
  ttitle OFF and 為下一條 SELECT 語句的前幾個字符
  
  underline (hex d)
  
  USER 為SCOTT
  
  verify ON
  
  wrap : 行將為已換行
  
  SQL>
  
  
  
  在上面的輸出中可以看到define參數被設置為on 後來我從新設置define為off(set define off);
  
  重新執行插入語句運行結果如下:
  
  SQL> CREATE TABLE TEST (
  
   ID NUMBER () PRIMARY KEY
  
   NAME VARCHAR ());
  
  表已創建
  
  已用時間: : :
  
  SQL>
  
  SQL> show define
  
  define OFF
  
  SQL> insert into test values(sgs&a&n);
  
  已創建
  
  已用時間: : :
  
  SQL> select * from test;
  
  ID NAME
  
  
  
   sgs&a&n
  
  已用時間: : :
  
  結果顯示插入&字符成功
  
  後來我又在sqlplus直接運行居然也成功後來我檢查了一下define的設置此時為 define on狀態
  
  可是為什麼卻可以插入了後來又把他設置為off同樣可以插入成功因為我覺得sqlplus命令行是不支持
  
  自定義變量因此可以插入成功而sqlplusw支持自定義變量所以一定要先設置過define off才可以
From:http://tw.wingwit.com/Article/program/Oracle/201311/18886.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.