2007/07/30

xp 裝置管理員的小技巧


執行 cmd
set DEVMGR_SHOW_NONPRESENT_DEVICES=1
devmgmt.msc
叫出裝置管理員, 檢視中會多一個顯示隱藏的裝置.

這在驅動程式有問題時找回被佔用的 com port 時很好用喔...



2007/07/18

Oracle SQL Tricks - 分析函數 - 階層結構抽出


用這技術可實作不限階層 bom 表, 搭配先前 With clause 的技術,
彈性就更大. 實作出的 bom 表遠比前人用一堆子查詢作出的漂亮的許多.
以下我們以人事的例子來看...
/*
EMPNO ENAME      JOB              MGR        SAL       COMM
---------- ---------- --------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902        800
      7499 ALLEN      SALESMAN        7698       1600        300
      7521 WARD       SALESMAN        7698       1250        500
      7566 JONES      MANAGER         7839       2975
      7654 MARTIN     SALESMAN        7698       1250       1400
      7698 BLAKE      MANAGER         7839       2850
      7782 CLARK      MANAGER         7839       2450
      7839 KING       PRESIDENT                  5000
      7844 TURNER     SALESMAN        7698       1500          0
      7900 JAMES      CLERK           7698        950
      7902 FORD       ANALYST         7566       3000
      7934 MILLER     CLERK           7782       1300
*/
select
  empno,
  lpad(' ',2*(level))  ename ename,
  job, hiredate, sal, comm
from emp
start with ename = ( select ename from emp where mgr is null )
connect by prior empno = mgr;
/*
     EMPNO ENAME                JOB       HIREDATE        SAL     COMM
---------- -------------------- --------- -------- ---------- --------
      7839   KING               PRESIDENT 81-11-17       5000
      7566     JONES            MANAGER   81-04-02       2975
      7902       FORD           ANALYST   81-12-03       3000
      7369         SMITH        CLERK     80-12-17        800
      7698     BLAKE            MANAGER   81-05-01       2850
      7499       ALLEN          SALESMAN  81-02-20       1600      300
      7521       WARD           SALESMAN  81-02-22       1250      500
      7654       MARTIN         SALESMAN  81-09-28       1250     1400
      7844       TURNER         SALESMAN  81-09-08       1500        0
      7900       JAMES          CLERK     81-12-03        950
      7782     CLARK            MANAGER   81-06-09       2450
      7934       MILLER         CLERK     82-01-23       1300
*/



2007/07/12

Fink - 安裝 OpenSource 的軟體至 MacOSX 的利器


The Fink project wants to bring the full world of
Unix Open Source software to Darwin and Mac OS X.
接觸到這個軟體是為了裝 PostgreSQL,
根據官網的建議...是透過 Fink 安裝.
http://developer.apple.com/internet/opensource/postgres.html

Fink 首頁.
http://www.finkproject.org/index.php?phpLang=en

安裝花絮...Fink for x86 installer

不過還有一個更有趣的...
就是裡面有一段話...
“Don’t trust the “disk space required” figures.”
呵呵...不知道是怎樣....



2007/07/09

FireFox 記憶體減肥法


很多人喜歡用 FireFox, 
但是 FireFox 的記憶體使用量簡直比 IE 還要恐怖~
這邊有一個小技巧,

在 FireFox 的網址列輸入 about:config 按 Enter,
會看到詳細的設定清單,
清單上任一項上按右鍵, 新增→新增真假(Boolean)值,
在對話框中, 設定值的名稱輸入 config.trim_on_minimize
並選 True, 關閉 FireFox 後重新改動 FireFox, 

之後若不用 FireFox 時把它縮小, 記憶體就會自動減肥喔~~~效果很棒的.

另外, 還有另一個參數,
network.http.pipelining 設成 True,
會加速網頁開啟及顯示~

效果很讚喔...  ;-)



2007/07/06

網頁過期 php 處理方式


在我們利用 javascript history.go(-1); 的時候, 
常會出現的問題....
有時候可以簡單的在 php 處理掉.
/* キャッシュリミッタを'private'に設定する */
session_cache_limiter('private');
$cache_limiter = session_cache_limiter();
echo "The cache limiter is now set to $cache_limiter
"; // then you can do session_start() ....



2007/07/05

Ruby with OCI8


サンプルコードで使用するパッケージのソース
CREATE OR REPLACE PACKAGE MIS_TEST01 IS
  PROCEDURE my_proc(a1 IN number, a2 IN varchar2, 
                    b1 OUT number, b2 OUT varchar2
  );
END;
/
CREATE OR REPLACE PACKAGE BODY MIS_TEST01 IS
  PROCEDURE my_proc(a1 IN number, a2 IN varchar2,
                    b1 OUT number, b2 OUT varchar2
  ) IS
  BEGIN
    b1 := a1 * 2;
    b2 := UPPER(a2);
  END;
END;
/
明示的に名前でもってパラメータをバインドする。
# use OCI8::Cursor#bind_param and OCI8::Cursor#exec
sql = 'begin MIS_TEST01.my_proc(:a1, :a2, :b1, :b2); end;'
cursor = conn.parse(sql)
cursor.bind_param(':a1', 123)
cursor.bind_param(':a2', 'abc')
# Fixnum としてバインド。値は NULL
cursor.bind_param(':b1', nil, Fixnum)
# String としてバインド。文字列の最大長は 20 で、値は NULL。
cursor.bind_param(':b2', nil, String, 20)
cursor.exec()
# パラメータを名前でバインドしたときは名前を使用。
p cursor[':b1'] # => 246
p cursor[':b2'] # => ABC
明示的に位置でもってパラメータをバインドする。
# use OCI8::Cursor#bind_param and OCI8::Cursor#exec
sql = 'begin MIS_TEST01.my_proc(:a1, :a2, :b1, :b2); end;'
cursor = conn.parse(sql)
cursor.bind_param(1, 123)
cursor.bind_param(2, 'abc')
cursor.bind_param(3, nil, Fixnum)
cursor.bind_param(4, nil, String, 20)
cursor.exec()
# パラメータを位置でバインドしたときは位置を使用。
p cursor[3] # => 246
p cursor[4] # => "ABC"
暗黙的にパラメータをバインドする。
# use OCI8::Cursor#exec with bind parameters.
sql = 'begin MIS_TEST01.my_proc(:a1, :a2, :b1, :b2); end;'
cursor = conn.parse(sql)
cursor.exec(123, 'abc', [nil, Fixnum], [nil, String, 20])
# 1番目の引数は1番目の位置のバインド値となる。
# 2番目は2番目のバインド位置....。
# 値が配列のときは、配列の最初の要素がバインドする値で、
# 2番目の要素が型、3番目の要素は最大長となる。
# パラメータは位置でもってバインドされる。
p cursor[3] # => 246
p cursor[4] # => "ABC"
実行してバインドパラメータの値を一回で取得する。
# OCI8#exec with bind parameters
# 実行する SQL が PL/SQL ブロックの場合は、パラメータすべての値を配列で戻す。
sql = 'begin MIS_TEST01.my_proc(:a1, :a2, :b1, :b2); end;'
params = conn.exec(
  sql, 123, 'abc', 
  [nil, Fixnum], [nil, String, 20]
)
p params[0] # => 123
p params[1] # => "abc"
p params[2] # => 246
p params[3] # => "ABC"
http://ruby-oci8.rubyforge.org/ja/api_OCI8.html



PL/SQL stored procedure do select


一般來說, 無法直接由 stored procedure select 回來, 
而是用 dbms_output.put_line 寫回資料,
但是今天看到有趣的寫法如下.
CREATE OR REPLACE PACKAGE MIS_TEST01 
AS
  TYPE CUR IS REF CURSOR;
  PROCEDURE GET_NO(v_no report.no%TYPE,OPCUR OUT CUR);
END;
/
CREATE OR REPLACE PACKAGE BODY MIS_TEST01 
AS
  PROCEDURE GET_NO(v_no report.no%TYPE,OPCUR OUT CUR)
  AS
  BEGIN
    OPEN OPCUR FOR
      SELECT * FROM report WHERE report.no=v_no;
  END;
END;
/