2012年9月19日 星期三

SQL 輸出 UTF8 的 csv 檔

檔案開頭寫入 nchr(to_number('EFBBBF','XXXXXX')) + 第一行字串

因 Excel 以檔案開頭為 EFBBBF 來判斷是否為 utf8 文件
如直接寫入第一行字串則會以 Big5 文件來開啟 csv 檔而變成亂碼

特別要注意的是如果檔案是要餵給其他系統
則必須要考慮前三個 Byte 是否為 EFBBBF 而排除

2012年8月25日 星期六

Array insert table

DECLARE
-----------------------------------------------------------------------------
-- NAME: Array Insert Table
-- NOTE: 1. Declare
--         1.1 .Declare array for cursor
--         1.2. Declare array for insert table
--         1.3. Declare record for keep initial value
--       2. Begin
--         2.1. open cursor
--         2.2. default value
--         2.3. array loop
--         2.4. insert table
-----------------------------------------------------------------------------
    cursor c_cursor is
           select 1         rec_id,
                  'ABC'     rec_value
             from dual;

    TYPE cursor_rec_type IS TABLE OF c_cursor%rowtype INDEX BY PLS_INTEGER;
    cursor_rec_temp          cursor_rec_type;

    TYPE rec_type IS TABLE OF table_name%rowtype INDEX BY PLS_INTEGER;
    rec_temp            rec_type;
    rec_dummy           table_name%rowtype;

    ii     number := 1 ;

BEGIN

  -----------------------------------------------------------------------------
  -- 2.1. open cursor
  -----------------------------------------------------------------------------
    open c_cursor;
    fetch c_cursor bulk collect into cursor_rec_temp;
    close c_cursor;

  -----------------------------------------------------------------------------
  -- 2.2. default value
  -----------------------------------------------------------------------------
    rec_dummy.created_by     :=  'User';
    rec_dummy.creation_date  :=  sysdate;

  -----------------------------------------------------------------------------
  -- 2.3. array loop
  -----------------------------------------------------------------------------
    for i in 1 .. cursor_rec_temp.count loop

        -- initial record value
        rec_temp(ii)             :=  rec_dummy;
        rec_temp(ii).rec_value   :=  cursor_rec_temp(i).rec_value;

        -- validate SQL
        begin
          null;
        end;

        -- add count or delete record
        if validate success then
           ii := ii + 1 ;
        else
           rec_temp.delete(ii);   -- delete record when validate fail
        end if;

    end loop;

  -----------------------------------------------------------------------------
  -- 2.4. insert table
  -----------------------------------------------------------------------------
    forall p in 1 .. rec_temp.count
    insert into table_name values rec_temp(p);

EXCEPTION
  when others then
    rollback;
END;
/


2012年7月10日 星期二

Regedit Note


-- 右鍵選單
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell]
[HKEY_CLASSES_ROOT\*\shell\PSPad]
[HKEY_CLASSES_ROOT\*\shell\PSPad\command]
@="C:\\Program Files\\PSPad editor\\PSPad.exe %1"

-- 隱藏磁碟
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer]
"NoDrivers"=dword:00000000
"NoViewOnDriver"=dword:00000000

十進位:
       A=1,          B=2           C=4,         D=8,
      E=16,         F=32,         G=64,       H=128,
     I=256,        J=512,       K=1024,      L=2048,
    M=4096,       N=8192,      O=16384,     P=32768,
   Q=65536,     R=131072,     S=242144,    T=524288,
 U=1048576,    V=2097152,    W=4194304,   X=8388608,
Y=16777216,   Z=33554432, ALL=67108863,

十六進位:
       A=1,          B=2           C=4,         D=8,
      E=10,         F=20,         G=40,        H=80,
     I=100,        J=200,        K=400,       L=800,
    M=1000,       N=2000,       O=4000,      P=8000,
   Q=10000,      R=20000,      S=40000,     T=80000,
  U=100000,     V=200000,     W=400000,    X=800000,
 Y=1000000,    Z=2000000,  ALL=4000000,

(從 2到 226 )

-- 關閉自動撥放
NoDriveTypeAutoRun = b5 (181)

常用推薦軟體

<< Mac OSX >>
CoRD: 遠端桌面
MPlayer OSX Extended: 播放軟體
SyncTwoFolders: 資料夾同步

<< Windows >>
Chrome
ImgBurn
FileZilla
7zip
Adobe Reader
Adobe Flash
DVDFab Virtual Drive
DVDFab HD Decrypter
RealVNC
PSPad
iTunes
Real Alternative
SMPlayer
XnView
Skype
MSN
eMule
PPStream
AVStoDVD

其他
Freemake Video Converter
Alcohol 52


自動掛載

iso 自動掛載
  "C:\Program Files\Alcohol\AxCmd.exe" 1: /M:"%L"
DVD 自動播放
  "C:\Program Files\Real Alternative\Media Player Class\mplayerc.exe" /dvd "%L"
桌面捷徑
  "C:\Program Files\Real Alternative\Media Player Class\mplayerc.exe" /dvd I:\

部份的檔案瀏覽器可支援直接FTP或SMB登入檔案伺服器
ftp://192.168.xxx.xxx
smb://192.168.xxx.xxx



.

2012年7月6日 星期五

Client-Server 及 3 Tier

網路上對這方面的解釋與說明百百款
以下是一點個人以程式開發者的角度來看待 Server-Client 及 3 Tier 架構
可能不完全正確,只是一種記憶不同差異的方式
待未來有更深入的了解時再隨時補充修改

Server-Client

Server 端是存放資料的地方(DB Server)
也可存放部分程式元件
OS 有可能是 Unix-Like 或者 Windows

Client 端則多為Windows
UI 或 Application 多半在 Client 端執行
所以 Client 端會需要安裝一些軟體

檔案的輸出與輸入皆可直接在 Client 端產生 隨著系統愈龐大 Client 端需要耗用更多的硬體資源

3 Tier
DB Server --- AP Server --- Client

DB Server 大致和上面一樣
存放資料以及部分的程式元件

AP Server 負責程式的執行
需要安裝執行程式的軟體
也由於程式執行是在 AP Server 上
User 將執行的指令傳送出去後
登出系統或連線中斷都不會中止程式的執行
User 可以把 Client 端電腦關了隔天再來看結果

AP Server OS 也可以是 Unix-Like 或者 Windows
檔案通常是規劃產生在 DB/AP Server 上
如果 AP Server 與 Client 的 OS 不同
必須特別注意檔案輸出輸入的編碼與規則(e.g. 換行符號)
以及 User 需透過 FTP 到 Server 上取得或上傳檔案 (或者由 Server 寄送 Email 等其他方式)

Client 端通常以 Browser 來登入操作系統
由於執行程式是 Server 在負責
所以不太需要安裝執行程式所需要的軟體

2012年6月27日 星期三

Ubuntu 12.04


## 用來取得遠端更新伺服器的套件檔案清單。
sudo apt-get update

## 更新套件
sudo apt-get -y dist-upgrade

## 清除更新時所下載回來的更新(安裝)檔案
sudo apt-get clean

## 安裝 User and Group 設定程式
## search and install gnome-system-tools
sudo apt-get install gnome-system-tools

## CPU 溫度監控
sudo apt-get install lm-sensors
sudo sensors-detect
   ## YES to Last step and find the follow message on screen
   To load everything that is needed, add this to /etc/modules:
   #----cut here----
   # Chip drivers
   coretemp
   it87
   #----cut here----

sudo modprobe coretemp
sudo modprobe it87
sensors

2012年6月26日 星期二

SQL 函數 (Oracle Database)

數字轉 16 進位
to_char(p_value,'XXXXXXXX')

由後往前
instr('ALL.FILE.CSV.TXT', '.', -1)  --回傳(13),最後一個
substr('ALLFILE.CSV.TXT', -4, 4)   --回傳(.TXT)

UTF8 轉 BIG5,其中'ZHT16MSWIN950'已包含'ZHT16BIG5'字集
convert(p_string, 'ZHT16MSWIN950', 'AL32UTF8')

Day
to_char(sysdate,'Day')
to_char(sysdate,'Day','NLS_DATE_LANGUAGE = American')

首字母大寫
initcap('ABCDE')

ascii
chr(65)   <=>  ascii('A')
chr(90)   <=>  ascii('Z')
chr(97)   <=>  ascii('a')
chr(122)  <=>  ascii('z')

最大 and 最小
greatest(5,9,4)
least(5,9,4)

months_between
months_between(sysdate, '26-JAN-2012')
months_between(p_end_date, p_beg_date)

mod
mod(M, N)   ==> M/N

次方
power(2, 10)  ==> 210 = 1024

2012年6月8日 星期五

桌面捷徑參數

1.PuTTY
於桌面捷徑內輸入完整路徑+連線資訊
用滑鼠雙擊可自動連線(慎用!有密碼被看光之風險!)
"C:\Program Files\Putty\putty.exe" -ssh username@hostname -pw xxxxx

BULK_COLLECT 與 FORALL


大量資料時的 select, insert, update, 適時使用 BULK_COLLECT 與 FORALL 可增加程式效能

DECLARE
   TYPE rec_type IS TABLE OF emp%rowtype INDEX BY PLS_INTEGER;
   rec        rec_type         ;
BEGIN

   select em.*
     bulk collect
     into rec
     from emp  em
    order by 1;

   forall i in 1 .. rec.count
   save exceptions
   insert into emp_temp2
   values (9999, sysdate, rec(i).empno, rec(i).ename, rec(i).sal);

EXCEPTION
  when others then
    dbms_output.put_line('There are '|| sql%bulk_exceptions.count ||' exceptions');
    for m in 1 .. sql%bulk_exceptions.count loop
        dbms_output.put_line(SQL%bulk_exceptions(m).error_index || ' -- ' ||
                             m || ' -- ' ||
                             SQL%bulk_exceptions(m).error_code || ' -- ' ||
                             SQLERRM(-SQL%bulk_exceptions(m).error_code)  );
    end loop;
END;
/

2012年6月5日 星期二

RealVNC

對方系統是 Win7 時
VNC Server 預設安裝路徑應該是"C:\Program Files\RealVNC\VNC Server"
先將路徑內 vncserver.exe 設為"以系統管理員身份執行此程式"(內容->相容性->特殊權限等級)
並建立兩個文件 viewerip.txt 及 vncconnect.cmd
viewerip.txt 只打上己方的 ip
vncconnect.cmd 則貼上下列指令
@echo off
for /F %%c in (viewerip.txt) do (
cd "C:\Program Files\RealVNC\VNC Server"
vncserver -service -connect %%c
goto :end
)
:end

1.需要連線時, 己方須開啟 VNC Viewer Listening Mode
2.如己方是浮動ip, 則先請對方將 viewerip.txt 內的 ip 更新
3.雙擊 vncconnect.cmd 即可完成連線

這種方式最主要是盡可能的簡化對方的設定操作步驟
同時解決對方電腦躲在分享器後面及兩方都是浮動ip的問題
(可省去到系統匣找 VNC 選單跟連線功能, 僅僅只需要改文字檔的 ip 跟點兩下滑鼠)
當然如果自己也在分享器後面, 就要設定 5500 port forward


如果是己方是固定ip
將對方電腦內 vncserver.exe 捷徑拉到桌面
於內容->捷徑->目標內後面加補參數" -service -connect 固定ip"即可


------------------------------------------------------------------------------------
若己方是用 Ubuntu 12.04 已預設裝上 Remmina Remote Desktop Client
可不必安裝 RealVNC 來開 Listen Mode
可選擇 VNC - Incoming Connection 進入 Viewer 端 Listen Mode 模式


------------------------------------------------------------------------------------
-- 以下是較早版本在 winXP 下的使用方式, 也可以視情況使用
-- for RealVNC 4.1.3 & Windows XP
Server端:
將"C:\Program Files\RealVNC\VNC4\winvnc4.exe"拉至桌面為捷徑,
於目標路徑後加入參數-noconsole -connect
完整路徑:"C:\Program Files\RealVNC\VNC4\winvnc4.exe" -noconsole -connect
雙擊捷徑輸入 Viewer 端 IP 即可完成連線


2012年6月4日 星期一

SQL 參數設定


set pagesize 0                  -- 每頁行數(0:不分頁)
set linesize 1000               -- 每行字數
set space    0                  -- 欄位間空幾個space
set heading off                 -- 顯示表頭
set feedback off                -- 回應執行結果  ex. 10 row selected.
set verify off                  -- 顯示執行時輸入的變數
set trimout on                  -- 刪除行尾空白
set term off                    -- 顯示 script 執行結果
set echo off                    -- 顯示 script 的命令
set termout off                 -- 顯示 script 命令的執行結果
set trimspool on                -- 刪除 spool 行尾空白
set serveroutput on size 32767  -- spool buffer
set time off                    -- 顯示時間
set timing off                  -- 顯示執行花費時間
set numwidth 20                 -- 預設數字長度

spool d:\log.txt
select * from user_objects;
spool off;

2012年6月3日 星期日

Windows 與 Unix-Like 換行符號


Windows是13 (Line feed) + 10 (Carriage return)
Unix-Like則只有10 (Carriage return)
當使用者在Unix-Like系統下的時候
兩者皆可以正常換行(在畫面上13是以一個空格來呈現)
而在windows下有些文字編輯器有自動轉換的功能
但預設的文字編輯器notepad並沒有轉換的功能

以上的狀況是發生在UTF8系統輸出BIG5檔案
一直錯以為是轉碼不完全造成
其實是在2Tier架構下Client端都是win系統
但到了3Tier下執行程式與產生檔案的是AP Server(Unix)
而User使用的幾乎是win才會造成這種情形