2012年6月19日 星期二

JAVA - Write File


public class WriteText{
    public static void main(String[] args){
        try {
            FileWriter outFile = new FileWriter(args[0]);
            PrintWriter out = new PrintWriter(outFile);
           
            // Also could be written as follows on one line
            // Printwriter out = new PrintWriter(new FileWriter(args[0]));
       
            // Write text to file
            out.println("This is line 1");
            out.println("This is line 2");
            out.print("This is line3 part 1, ");
            out.println("this is line 3 part 2");
            out.close();
        } catch (IOException e){
            e.printStackTrace();
        }
    }
}

http://www.abbeyworkshop.com/howto/java/writeText/index.html

2012年6月11日 星期一

移除IE9

http://lissam.pixnet.net/blog/post/24107184-ie9-%E7%A7%BB%E9%99%A4-internet-explorer-9-%E8%A7%A3%E9%99%A4%E5%AE%89%E8%A3%9D%E6%96%B9%E6%B3%95-(%E9%80%B2%E9%9A%8E)

FORFILES /P %WINDIR%\servicing\Packages /M Microsoft-Windows-InternetExplorer-*9.*.mum /c "cmd /c echo Uninstalling package @fname && start /w pkgmgr /up:@fname /norestart"


感謝IST提供

系統日 - 年(One year minus on Date)

http://www.orafaq.com/forum/t/143512/2/



select add_months(sysdate,-12) from dual ; 



select sysdate - numtoyminterval(1, 'YEAR') from dual;
SELECT SYSDATE - interval '1' YEAR FROM DUAL;

另一個寫法:

declare

ltimestamp_start       timestamp;
ltimestamp_stop        timestamp;
linterval_diff         interval day to second;

ldt_temp               date;

begin

ltimestamp_start := systimestamp;
dbms_output.put_line(ltimestamp_start);

  -- Routine to performance test... 
  for i in 1 .. 10000 loop
    select sysdate into ldt_temp from dual;
  end loop;

ltimestamp_stop := systimestamp;
dbms_output.put_line(ltimestamp_stop);

linterval_diff := ltimestamp_stop - ltimestamp_start;

dbms_output.put_line(CHR(10)||LPAD('=',22,'=')||CHR(10));
dbms_output.put_line('  Runtime Difference'||CHR(10)||LPAD('=',22,'='));
dbms_output.put_line(
     '     Days : '||EXTRACT(DAY FROM linterval_diff)||CHR(10)||
     '    Hours : '||EXTRACT(HOUR FROM linterval_diff)||CHR(10)||
     '  Minutes : '||EXTRACT(MINUTE FROM linterval_diff)||CHR(10)||
     '  Seconds : '||EXTRACT(SECOND FROM linterval_diff) );
http://jasonvogel.blogspot.tw/2006/11/example-using-systimestamp-milliseconds.html

2012年6月8日 星期五

Transaction 的範例

http://tomkuo139.blogspot.tw/2009/11/oracle-plsql-pragma-autonomoustransacti.html




"使用" pragma AUTONOMOUS_TRANSACTION 範例
--建立 Temp Table
create tom1 (
  aa varchar2(100);
);
 
--建立 Temp 程序
create or replace procedure tomPro
is
  pragma AUTONOMOUS_TRANSACTION;
begin
  insert into tom1 values('123');
  commit;
end;
 
--執行
begin
  insert into tom1 values( 'abc' );
  tomPro;
  insert into tom1 values( 'xyz' );
  rollback;
end;
 
--查看 Temp Table 結果
123




在Real Table很容易被lock,造成別人不能使用
若使用AUTONOMOUS_TRANSACTION,可以避免table lock的困擾
以下是一個不錯的範例介紹

CREATE OR REPLACE TRIGGER myTrigger
AFTER INSERT ON myTable
FOR EACH ROW
DECLARE
  PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
  UPDATE myMaxTable
     SET maxValue = ( SELECT MAX(c1) FROM myTable );
  COMMIT;
END;
/


INSERT INTO myTable VALUES (1);
COMMIT;

INSERT INTO myTable VALUES (2);
COMMIT;

SELECT maxValue FROM myMaxTable;
  MAXVALUE
----------
         1

SELECT MAX(c1) FROM myTable;
   MAX(C1)
----------
         2


http://www.astral-consultancy.co.uk/cgi-bin/hunbug/doco.cgi?11470

2012年6月7日 星期四

measure execution time


忘記在哪邊看到,要計算時間可以用to_char(time, 'sssss'),然後相減


DECLARE
    START_TIME   DATE;
    END_TIME     DATE;
BEGIN
    START_TIME := SYSDATE;
 
--    dbo.LF_GET_PROJECT_PRM_T('TPB72400001',  '20', '', '20110301', '0001760', ' ', 1, 2, 0, 0, 0, 1000000, 0, 100000, 'R880', 'D');

    DBO.JUC7924_7SP(null, null, null, null, 'TPB88S00005', '', '', :RC1); --CAS_P_TRVRAT
 
    END_TIME := SYSDATE;
 
    DBO.OF_INSERT_JUC_10TRANSFER8LOG('1', '', '', 'START TIME:'||START_TIME||', END TIME'||END_TIME, 'EXECUTION TIME:'||(to_char(END_TIME, 'sssss') - to_char(START_TIME, 'sssss')));

END;

SELECT * FROM DBO.TT_LOG;

SELECT * FROM DBO.TT_CAS_P_TRVRAT;

REMOVE DUPLICATE RECORD(2)

繼上次會出現重複的資料
先用group by 把重複的資料拉出來
後來用輸出Insert 指令
最後delete掉後再把剛剛的insert指令丟進來


後來又找相關資料
http://scottelkin.com/programming/find-and-delete-duplicates-in-sql/
這個改天再來玩

但後來發現可以先create view
然後把重複資料塞進來
delete原本db裡面重複的資料
再把view的資料塞進來

就是把上次的動作,用view做掉


CREATE VIEW TEMP1
AS
select * from fbeu.cas_p_trvrat where ratnam = 'R050' and trvltype = 'G' and channel = 20 AND DAYS = 2 and INS_MED = 1500000 AND ROWNUM = 1


DROP VIEW TEMP



另外又無意間發現新的東西 PARTITION BY
SELECT RATNAM, RANK() OVER (PARTITION BY RATNAM ORDER BY NUM) RNK 
FROM (SELECT ROWNUM NUM, CAS.* FROM FBEU.CAS_P_TRVRAT CAS WHERE RATNAM = 'R050' AND TRVLTYPE = 'G' AND CHANNEL = 20 AND DAYS = 2) X
把資料分割,先這樣改天再來玩

2012年6月5日 星期二

REMOVE DUPLICATE RECORD


剛剛發現重複篩入資料
參考之前在網路上找的資料
http://www.orafaq.com/faq/how_does_one_eliminate_duplicates_rows_from_a_table
想砍ROWID,但用ROWID找出來都是空白

後來用最人工的方法
先把重複的資料用GROUP BY SELECT出來
然後產生INSERT指令
再來砍掉重複的資料後
再把INSERT指令重新

SELECT
COUNT(*)
,RATNAM      
,TRVLTYPE    
,INS_AMNT    
,DAYS        
,INS_MED    
,PREM        
,INS_45_AMOUNT
,CHANNEL    
FROM FBEU.CAS_P_TRVRAT WHERE RATNAM = 'B2C_TP1'
GROUP BY
RATNAM      
,TRVLTYPE    
,INS_AMNT    
,DAYS        
,INS_MED    
,PREM        
,INS_45_AMOUNT
,CHANNEL    
HAVING COUNT(*) > 1;