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

ORA-12714錯誤解決總結

2013-11-13 12:35:57  來源: SQL語言 

  目前數據庫升級到了 win字符集為UTF

  發現在別人寫的過程中總是這段不能編譯通過報ORA

      INSERT INTO b_dict(kind code)
         SELECT a*
           FROM THE (SELECT CAST (string_split (code_in ) AS mydicttype)
                       FROM DUAL) a;

  其中mydicttype定義為create or replace type myDictType as table of nvarcharb_dict定義為kind nvarcharcode nvarchar

  函數string_split為拆分字符串 保存在mydicttype類型變量中並返回該變量

  但編譯時總在a*報Compilation errors for PROCEDURE Error PL/SQL ORA 指定的國家字符集無效

  因為用戶要求數據庫用UTF所有varcharchar全用nvarchar格式我在client直接執行INSERT INTO b_dict(kind code)

  SELECT a* FROM THE (SELECT CAST (string_split (code_in ) AS mydicttype)

  FROM DUAL) a是可以的但是放在過程中編譯就通不過?奇怪難道還有哪兒的字符集沒設置好?盼兄指點迷津

  解決方法三種目前只能是mydicttype的類型保留為varchar

  其他程序代碼中如union all時常量要在前面加n進行處理如 為n才能修正這些問題往對大家有用

  對使用nvarchar的地方加上 to_char( nvarchar 的變量或字段 )對使用varchar的地方加上 to_char( varchar 的變量或字段(nvarchar類型))

  試一下 有時候遇到類似問題我就這樣轉換一下

   Specifying the USING CHAR_CS argument converts text into the database character set The output datatype is VARCHAR Specifying the USING NCHAR_CS argument converts text into the national character set The output datatype is NVARCHAR

  Example 

CREATE TABLE t (char_col  CHAR()
nchar_col nchar());
INSERT INTO t
VALUES (Hi NBye);
SELECT * FROM t;
  
CHAR_COL     NCHAR_COL
     
Hi           Bye
    Example 

UPDATE t SET
nchar_col = TRANSLATE(char_col USING NCHAR_CS);
UPDATE t SET
char_col = TRANSLATE(nchar_col USING CHAR_CS);
SELECT * FROM t;
  
CHAR_COL     NCHAR_COL
     
Hi           Hi
    Example 

UPDATE t SET
nchar_col = TRANSLATE(deo USING NCHAR_CS);
UPDATE t SET
char_col = TRANSLATE(Ndeo USING CHAR_CS);
SELECT * FROM t;
  
CHAR_COL     NCHAR_COL
     
deo          deo

  表不多的話可以這樣

  //創建一個新表並把數據轉換為varchar create table newtbname as select coltranslate(col using char_cs)col from tbname


From:http://tw.wingwit.com/Article/program/SQL/201311/16215.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.