2013年11月11日 星期一

oracle 判斷中英文

SELECT

CASE WHEN  (LENGTH(FAC_NAME_IN) = LENGTHB(FAC_NAME_IN)) THEN FAC_NAME_IN END CUST_ENG_NAME ,

CASE WHEN  (LENGTH(FAC_NAME_IN) != LENGTHB(FAC_NAME_IN)) THEN FAC_NAME_IN END CUST_CHT_NAME 

FROM TABLENAME_IN DTL

oracle 讀取txt檔

Oracle的UTL_FILE用文件的I/O操作。
(1)Oracle10g之前的版本需要指定utl_file包可以操作的目。
         方法: 1、alter system set utl_file_dir='e:/utl' scope=spfile;

 2、在init.ora文件中,配置如下:UTL_FILE=E:/utl或者UTL_FILE_DIR=E:/utl;
 (2)Oracle10g之后的版本,


1.創建目錄:
2 CREATE [OR REPLACE] DIRECTORY directory AS 'pathname';
32.目錄創建以後,就可以把讀寫權限授予特定用戶,具體語法如下:
4 GRANT READ[,WRITE] ON DIRECTORY directory TO username; 

utl_file.fopen(
file_location IN VARCHAR2 --路径
file_name     IN VARCHAR2,   --文件名称
open_mode     IN VARCHAR2,   --打开模式 R  W  A 追加
max_linesize  IN BINARY_INTEGER DEFAULT NULL)
RETURN file_type;

DECLARE
  v_output  utl_file.file_type;
  v_contxt  VARCHAR2(250);
  v_pathna varchar2(10);
BEGIN
  v_pathna := 'utl_file_dir';
  v_output:= utl_file.fopen(v_pathna, 'test.txt', 'R');
  LOOP
    BEGIN
      utl_file.get_line(v_output, v_contxt);
      dbms_output.put_line(v_contxt);
    EXCEPTION
      WHEN OTHERS THEN
        EXIT;
    END;
  END LOOP;
  utl_file.fclose(v_output);
END ;

2013年11月5日 星期二

ORACLE 判斷資料中, 有沒有中文字

SELECT *  FROM table a WHERE LENGTH (id) != LENGTHB (id);
區別:length   是字串長度,lengthb   是位元組長度


select length('abc中國')
  from dual;
 
-- 結果: 5 碼
--------------------------
 
select lengthb('abc中國')
  from dual;
 
-- 結果: 9 碼 (UTF8 一個中文字 3 碼)
--------------------------
 
select 1
  from dual
 where length('abc中國') = lengthb('abc中國');
 
-- 結果: 0 row (表示字串中有中文字)
--------------------------
 
select 1
  from dual
 where length('abc') = lengthb('abc');
 
-- 結果: 1 row (表示字串中無中文字)