Oracle 11g 學習筆記 (2)

來源:互聯網
上載者:User

一些 ASP.NET + Oracle 11g 系統邊寫邊學的隨筆,包括 Oracle 的「批次更新」,以及將 Oracle 內部編碼設定為 Unicode 字元集。

(四) Oracle 的「批次 (batch) 更新」、「批次新增」、「批次刪除」文法

Oracle 仍可如 SQL Server、Sybase 資料庫,用「分號 (;)」隔離多個 SQL statement,只是 Oracle 前後要再加上 begin、end 關鍵詞,例如:

string strSql = "begin insert into table01(id,name) values(99,'test'); insert into table01(id,name) values(99,'test'); end;";
string strSql = "begin update table01 set name='test2' where id=99; update table01 set name='test2' where id=99; end;";
string strSql = "begin delete from table01 where id=99; delete from table01 where id=19; end;";

因 Oracle 文法較嚴謹,不能直接在 SQL 陳述式中,出現「;」等特殊符號。

(五) 讓 Oracle 支援 Unicode 處理

Oracle 11g 剛裝好時,預設的字元集,會無法處理他國語言的文字。若您在 SqlPlus 輸入指令:
SELECT parameter, value FROM v$nls_parameters WHERE parameter LIKE '%CHARACTERSET';

會看到以下的 NLS_LANG 資訊:
--------------
NLS_CHARACTERSET
ZHT16MSWIN950 (繁體中文) 或
ZHS16GBK (簡體中文)

NLS_NCHAR_CHARACTERSET
AL16UTF16
--------------

接下來,我們要透過「ALTER DATABASE CHARACTER SET」這個指令,去更改 Oracle 內部的字元集編碼方式。

請先在 sqlplus 程式中,用 sysdba 角色進入,指令如下:

connect sys/密碼 as sysdba;

接著再輸入下列指令,執行完後即會自動執行轉換的工作:

shutdown immediate;
STARTUP MOUNT;
ALTER SESSION SET SQL_TRACE=TRUE;
ALTER SYSTEM ENABLE RESTRICTED SESSION;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
ALTER SYSTEM SET AQ_TM_PROCESSES=0;
ALTER DATABASE OPEN;
ALTER DATABASE character set INTERNAL_USE AL32UTF8;
ALTER SESSION SET SQL_TRACE=FALSE;
shutdown immediate;
startup;

這種方式可能會造成 Oracle 內,既有的儲存資料錯亂和遺失,在執行上述指令前,最好要先做備份資料的工作。

接下來,再執行一次下列指令,察看 NLS_LANG 資訊:
SELECT parameter, value FROM v$nls_parameters WHERE parameter LIKE '%CHARACTERSET';

NLS_LANG 資訊已經變成:
--------------
NLS_CHARACTERSET
AL32UTF8

NLS_NCHAR_CHARACTERSET
AL16UTF16
--------------

此外,網路上廣為流傳的用這種方法是不正確的:
update props$ set value$='AL32UTF8' where name='NLS_CHARACTERSET';
透過前述正確的「ALTER DATABASE CHARACTER SET」指令,去更改 characterset 後,Oracle 至少會更改 12 張 data dictionary;但若透過這種直接更新 props$ 表的方式,則只完成了其中十二分之一的工作,其潛在的完整性及隱憂可想而知。

若我們要用 ASP.NET 應用程式去擷取、寫入 Oracle 時,若有日文字、他國文字時,除了要先如上述把 Oracle 內部的字元集改成 Unicode 外,
在 ADO.NET 的聯機方式也要注意。以 Visual Studio 2005 來說,其內建的 OleDb Data Provider 用來聯機 Oracle 11g 時,並無法正確處理 Unicode 中的特殊字元和他國文字,甚至在寫入 Oracle 時,會出現以下錯誤:

因為加號或減號不符合或資料溢位之外的原因,無法轉換命令 parameter[1]'' 資料值。 id: 0

解決方式,是改用 OracleClient Data Provider,或用 Oracle 官方的 OleDb Data Provider,下載點為:
http://www.oracle.com/technology/software/tech/windows/ole_db/index.html
http://www.oracle.com/technology/software/tech/windows/odpnet/index.html

=================
參考檔案:
http://www.monster.com.tw/archives/471
http://www.javaworld.com.tw/jute/post/view?bid=21&id=137350&sty=1&tpg=2&age=0
http://blog.roodo.com/mywork/archives/6198547.html

=================

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.