標籤:www. 配置資訊 div 搜尋 proc gbk iat 開啟 disable
系統內容變數
變數名稱: NLS_LANG
變數值:SIMPLIFIED CHINESE_CHINA.ZHS16GBK
CREATE OR REPLACE PROCEDURE "TLGL"."TLGB"
AS
BEGIN
execute immediate ‘ALTER TRIGGER XG ENABLE‘;
END; --關閉所有觸發器
alter table tbname disable trigger all--開啟所有觸發器
alter table tbname enable trigger all 如果是啟停指定觸發器,則將all改為觸發器名 ALTER TRIGGER TRIGGER_name DISABLE; ALTER TRIGGER TRIGGER_name ENABLE;
在用cx_oracle串連oracle資料庫進行匯入的時候出現了很奇怪的問題:
oracle伺服器NLS_CHARACTERSET為AL32UTF8,要進行匯入的檔案編碼也是utf8,而用cursor.executemany進行匯入的時候出現了錯誤:‘gbk‘ codec can‘t encode character u‘\ue85f‘ in position 1: illegal multibyte sequence。
有點莫名其妙,從utf8到utf8也會經過字元編碼轉換?
用bing搜尋了一下,發現有人遇到同樣的問題:http://www.thecodingforums.com/threads/cx_oracle-and-utf8.354728/。發現是環境變數nls_lang的問題,於是將nls_lang設定為’AMERICAN_AMERICA.AL32UTF8‘,
應該‘SIMPLIFIED CHINESE_CHINA.AL32UTF8’也行,不過沒試過。設定之後匯入就沒問題了。設定方法可以直接改環境變數,也可以通過python來改:os.environ[‘nls_lang‘] = ‘AMERICAN_AMERICA.AL32UTF8‘ 。
另外,如果資料庫編碼是gbk,而檔案字元編碼是utf8,由於utf8中的某些字元在gbk中沒有,在編碼轉換的時候也會導致出錯。解決辦法是手動進行編碼轉換,如:value = value.decode(‘UTF-8‘).encode(‘GBK‘, ‘replace‘) 或者value = value.decode(‘UTF-8‘).encode(‘GBK‘, ‘ignore‘)
ORACLE配置資訊及觸發器