隨筆-314  評論-209  文章-0  trackbacks-0

          我的評論

          共3頁: 上一頁 1 2 3 
          re: java命令詳解 xzc 2009-12-04 17:24  
          /bea/bea/jdk150_10/bin/java -server -Xms1024m -Xmx1024m -XX:MaxPermSize=256m -DIBSS_HOME=/bea/odsapp

          -Xms1024m 初始化內存
          -Xmx1024m 最大內存
          -DIBSS_HOME=/bea/odsapp
          IBSS_HOME屬性,通System.getProperties()來可獲得.
          re: java命令詳解 xzc 2009-12-04 17:24  
          1.4.1 JVM堆大小的調整

          Sun HotSpot 1.4.1使用分代收集器,它把堆分為三個主要的域:新域、舊域以及永久域。JVM生成的所有新對象放在新域中。一旦對象經歷了一定數量的垃圾收集循環后,便獲得使用期并進入舊域。

          在永久域中JVM則存儲class和method對象。就配置而言,永久域是一個獨立域并且不認為是堆的一部分。下面介紹如何控制這些域的大小。可使用-Xms和-Xmx 控制整個堆的原始大小或最大值。

          下面的命令是把初始大小設置為128M:



          Java –Xms128m



          –Xmx256m為控制新域的大小,可使用-XX:NewRatio設置新域在堆中所占的比例。下面的命令把整個堆設置成128m,新域比率設置成3,即新域與舊域比例為1:3,新域為堆的1/4或32M:



          Java –Xms128m –Xmx128m



          –XX:NewRatio =3可使用-XX:NewSize和-XX:MaxNewsize設置新域的初始值和最大值。

          下面的命令把新域的初始值和最大值設置成64m:



          Java –Xms256m –Xmx256m –Xmn64m



          永久域默認大小為4m。運行程序時,JVM會調整永久域的大小以滿足需要。每次調整時,JVM會對堆進行一次完全的垃圾收集。

          使用-XX:MaxPerSize標志來增加永久域搭大小。在WebLogic Server應用程序加載較多類時,經常需要增加永久域的最大值。當JVM加載類時,永久域中的對象急劇增加,從而使JVM不斷調整永久域大小。為了避免調整,可使用-XX:PerSize標志設置初始值。下面把永久域初始值設置成32m,最大值設置成64m。



          Java -Xms512m -Xmx512m -Xmn128m

          -XX:PermSize=32m

          -XX:MaxPermSize=64m



          默認狀態下,HotSpot在新域中使用復制收集器。該域一般分為三個部分。第一部分為Eden,用于生成新的對象。另兩部分稱為救助空間,當Eden充滿時,收集器停止應用程序,把所有可到達對象復制到當前的from救助空間,一旦當前的from救助空間充滿,收集器則把可到達對象復制到當前的to救助空間。

          From和to救助空間互換角色。維持活動的對象將在救助空間不斷復制,直到它們獲得使用期并轉入舊域。使用-XX:SurvivorRatio可控制新域子空間的大小。

          同NewRation一樣,SurvivorRation規定某救助域與Eden空間的比值。比如,以下命令把新域設置成64m,Eden占32m,每個救助域各占16m:



          Java -Xms256m -Xmx256m -Xmn64m

          -XX:SurvivorRation =2



          如前所述,默認狀態下HotSpot對新域使用復制收集器,對舊域使用標記-清除-壓縮收集器。在新域中使用復制收集器有很多意義,因為應用程序生成的大部分對象是短壽命的。理想狀態下,所有過渡對象在移出Eden空間時將被收集。

          如果能夠這樣的話,并且移出Eden空間的對象是長壽命的,那么理論上可以立即把它們移進舊域,避免在救助空間反復復制。但是,應用程序不能適合這種理想狀態,因為它們有一小部分中長壽命的對象。

          最好是保持這些中長壽命的對象并放在新域中,因為復制小部分的對象總比壓縮舊域廉價。為控制新域中對象的復制,可用-XX:TargetSurvivorRatio控制救助空間的比例(該值是設置救助空間的使用比例。

          如救助空間位1M,該值50表示可用500K)。該值是一個百分比,默認值是50。當較大的堆棧使用較低的sruvivorratio時,應增加該值到80至90,以更好利用救助空間。用-XX:maxtenuring threshold可控制上限。

          為放置所有的復制全部發生以及希望對象從eden擴展到舊域,可以把MaxTenuring Threshold設置成0。設置完成后,實際上就不再使用救助空間了,因此應把SurvivorRatio設成最大值以最大化Eden空間,設置如下:



          Java … -XX:MaxTenuringThreshold=0

          –XX:SurvivorRatio=50000 …

          set trimspool on
          set linesize 120
          set pagesize 2000
          set newpage 1
          set heading off
          set term off
          spool 'd:\exp.txt'
          select owner || ',' || table_name || '..' from all_tables;
          spool off
          re: Oracle UTL_FILE 用法例子 xzc 2009-09-25 16:18  
          CREATE OR REPLACE PROCEDURE UTL_FILE_TEST AS
          V_FILE UTL_FILE.FILE_TYPE;
          V_BUFFER VARCHAR2(32767);
          BEGIN
          V_FILE := UTL_FILE.FOPEN('UTL', 'UTL_FILE_TEST.txt', 'A');
          V_BUFFER := 'EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO';
          UTL_FILE.PUT_LINE(V_FILE, V_BUFFER);
          FOR I IN (SELECT 'UTL_FILE_TEST' RESULT FROM dual) LOOP
          UTL_FILE.PUT_LINE(V_FILE, I.RESULT);
          END LOOP;
          UTL_FILE.FCLOSE(V_FILE);
          END;
          --監控索引是否使用

          alter index &index_name monitoring usage;

          alter index &index_name nomonitoring usage;

          select * from v$object_usage where index_name = &index_name;

          --求數據文件的I/O分布

          select df.name,phyrds,phywrts,phyblkrd,phyblkwrt,singleblkrds,readtim,writetim

          from v$filestat fs,v$dbfile df

          where fs.file#=df.file# order by df.name;

          --求某個隱藏參數的值

          col ksppinm format a54

          col ksppstvl format a54

          select ksppinm, ksppstvl

          from x$ksppi pi, x$ksppcv cv

          where cv.indx=pi.indx and pi.ksppinm like '\_%' escape '\' and pi.ksppinm like '%meer%';

          --求系統中較大的latch

          select name,sum(gets),sum(misses),sum(sleeps),sum(wait_time)

          from v$latch_children

          group by name having sum(gets) > 50 order by 2;

          --求歸檔日志的切換頻率(生產系統可能時間會很長)

          select start_recid,start_time,end_recid,end_time,minutes from (select test.*, rownum as rn

          from (select b.recid start_recid,to_char(b.first_time,'yyyy-mm-dd hh24:mi:ss') start_time,

          a.recid end_recid,to_char(a.first_time,'yyyy-mm-dd hh24:mi:ss') end_time,round(((a.first_time-b.first_time)*24)*60,2) minutes

          from v$log_history a,v$log_history b where a.recid=b.recid+1 and b.first_time > sysdate - 1

          order by a.first_time desc) test) y where y.rn < 30

          --求回滾段正在處理的事務

          select a.name,b.xacts,c.sid,c.serial#,d.sql_text

          from v$rollname a,v$rollstat b,v$session c,v$sqltext d,v$transaction e

          where a.usn=b.usn and b.usn=e.xidusn and c.taddr=e.addr

          and c.sql_address=d.address and c.sql_hash_value=d.hash_value order by a.name,c.sid,d.piece;

          --求出無效的對象

          select 'alter procedure '||object_name||' compile;'

          from dba_objects

          where status='INVALID' and wner='&' and object_type in ('PACKAGE','PACKAGE BODY');

          /

          select owner,object_name,object_type,status from dba_objects where status='INVALID';

          --求process/session的狀態

          select p.pid,p.spid,s.program,s.sid,s.serial#

          from v$process p,v$session s where s.paddr=p.addr;

          --求當前session的狀態

          select sn.name,ms.value

          from v$mystat ms,v$statname sn

          where ms.statistic#=sn.statistic# and ms.value > 0;

          --求表的索引信息

          select ui.table_name,ui.index_name

          from user_indexes ui,user_ind_columns uic

          where ui.table_name=uic.table_name and ui.index_name=uic.index_name

          and ui.table_name like '&table_name%' and uic.column_name='&column_name';

          --顯示表的外鍵信息

          col search_condition format a54

          select table_name,constraint_name

          from user_constraints

          where constraint_type ='R' and constraint_name in (select constraint_name from user_cons_columns where column_name='&1');

          select rpad(child.table_name,25,' ') child_tablename,

          rpad(cp.column_name,17,' ') referring_column,rpad(parent.table_name,25,' ') parent_tablename,

          rpad(pc.column_name,15,' ') referred_column,rpad(child.constraint_name,25,' ') constraint_name

          from user_constraints child,user_constraints parent,

          user_cons_columns cp,user_cons_columns pc

          where child.constraint_type = 'R' and child.r_constraint_name = parent.constraint_name and

          child.constraint_name = cp.constraint_name and parent.constraint_name = pc.constraint_name and

          cp.position = pc.position and child.table_name ='&table_name'

          order by child.owner,child.table_name,child.constraint_name,cp.position;

          --顯示表的分區及子分區(user_tab_subpartitions)

          col table_name format a16

          col partition_name format a16

          col high_value format a81

          select table_name,partition_name,HIGH_VALUE from user_tab_partitions where table_name='&table_name'

          --使用dbms_xplan生成一個執行計劃

          explain plan set statement_id = '&sql_id' for &sql;

          select * from table(dbms_xplan.display);

          --求某個事務的重做信息(bytes)

          select s.name,m.value

          from v$mystat m,v$statname s

          where m.statistic#=s.statistic# and s.name like '%redo size%';

          --求cache中緩存超過其5%的對象

          select o.owner,o.object_type,o.object_name,count(b.objd)

          from v$bh b,dba_objects o

          where b.objd = o.object_id

          group by o.owner,o.object_type,o.object_name

          having count(b.objd) > (select to_number(value)*0.05 from v$parameter where name = 'db_block_buffers');

          --求誰阻塞了某個session(10g)

          select sid, username, event, blocking_session,

          seconds_in_wait, wait_time

          from v$session where state in ('WAITING') and wait_class != 'Idle';

          --求session的OS進程ID

          col program format a54

          select p.spid "OS Thread", b.name "Name-User", s.program

          from v$process p, v$session s, v$bgprocess b

          where p.addr = s.paddr and p.addr = b.paddr

          UNION ALL

          select p.spid "OS Thread", s.username "Name-User", s.program

          from v$process p, v$session s where p.addr = s.paddr and s.username is not null;

          --查會話的阻塞

          col user_name format a32

          select /*+ rule */ lpad(' ',decode(l.xidusn ,0,3,0))||l.oracle_username user_name, o.owner,o.object_name,s.sid,s.serial#

          from v$locked_object l,dba_objects o,v$session s

          where l.object_id=o.object_id and l.session_id=s.sid order by o.object_id,xidusn desc ;

          col username format a15

          col lock_level format a8

          col owner format a18

          col object_name format a32

          select /*+ rule */ s.username, decode(l.type,'tm','table lock', 'tx','row lock', null) lock_level, o.owner,o.object_name,s.sid,s.serial#

          from v$session s,v$lock l,dba_objects o

          where l.sid = s.sid and l.id1 = o.object_id(+) and s.username is not null ;

          --求等待的事件及會話信息/求會話的等待及會話信息

          select se.sid,s.username,se.event,se.total_waits,se.time_waited,se.average_wait

          from v$session s,v$session_event se

          where s.username is not null and se.sid=s.sid and s.status='ACTIVE' and se.event not like '%SQL*Net%' order by s.username;

          select s.sid,s.username,sw.event,sw.wait_time,sw.state,sw.seconds_in_wait

          from v$session s,v$session_wait sw

          where s.username is not null and sw.sid=s.sid and sw.event not like '%SQL*Net%' order by s.username;

          --求會話等待的file_id/block_id

          col event format a24

          col p1text format a12

          col p2text format a12

          col p3text format a12

          select sid,event,p1text, p1, p2text, p2, p3text, p3

          from v$session_wait

          where event not like '%SQL%' and event not like '%rdbms%' and event not like '%mon%' order by event;

          select name,wait_time from v$latch l where exists (select 1 from (select sid,event,p1text, p1, p2text, p2, p3text, p3

          from v$session_wait

          where event not like '%SQL%' and event not like '%rdbms%' and event not like '%mon%'

          ) x where x.p1= l.latch#);

          --求會話等待的對象

          col owner format a18

          col segment_name format a32

          col segment_type format a32

          select owner,segment_name,segment_type

          from dba_extents

          where file_id = &file_id and &block_id between block_id and block_id + blocks - 1;

          --求buffer cache中的塊信息

          select o.OBJECT_TYPE, substr(o.OBJECT_NAME,1,10) objname , b.objd , b.status, count(b.objd)

          from v$bh b, dba_objects o

          where b.objd = o.data_object_id and o.owner = '&1' group by o.object_type, o.object_name,b.objd, b.status ;

          --求日志文件的空間使用

          select le.leseq current_log_sequence#, 100*cp.cpodr_bno/le.lesiz percentage_full

          from x$kcccp cp,x$kccle le

          where le.leseq =cp.cpodr_seq;

          --求等待中的對象

          select /*+rule */ s.sid, s.username, w.event, o.owner, o.segment_name, o.segment_type,

          o.partition_name, w.seconds_in_wait seconds, w.state

          from v$session_wait w, v$session s, dba_extents o

          where w.event in (select name from v$event_name where parameter1 = 'file#'

          and parameter2 = 'block#' and name not like 'control%')

          and o.owner <> 'sys' and w.sid = s.sid and w.p1 = o.file_id and w.p2 >= o.block_id and w.p2 < o.block_id + o.blocks

          --求當前事務的重做尺寸

          select value

          from v$mystat, v$statname

          where v$mystat.statistic# = v$statname.statistic# and v$statname.name = 'redo size';

          --喚醒smon去清除臨時段

          column pid new_value Smon

          set termout off

          select p.pid from sys.v_$bgprocess b,sys.v_$process p where b.name = 'SMON' and p.addr = b.paddr

          /

          set termout on

          oradebug wakeup &Smon

          undefine Smon

          --求回退率

          select b.value/(a.value + b.value),a.value,b.value from v$sysstat a,v$sysstat b

          where a.statistic#=4 and b.statistic#=5;

          --求DISK READ較多的SQL

          select st.sql_text from v$sql s,v$sqltext st

          where s.address=st.address and s.hash_value=st.hash_value and s.disk_reads > 300;

          --求DISK SORT嚴重的SQL

          select sess.username, sql.sql_text, sort1.blocks

          from v$session sess, v$sqlarea sql, v$sort_usage sort1

          where sess.serial# = sort1.session_num

          and sort1.sqladdr = sql.address

          and sort1.sqlhash = sql.hash_value and sort1.blocks > 200;

          --求對象的創建代碼

          column column_name format a36

          column sql_text format a99

          select dbms_metadata.get_ddl('TABLE','&1') from dual;

          select dbms_metadata.get_ddl('INDEX','&1') from dual;

          --求表的索引

          set linesize 131

          select a.index_name,a.column_name,b.status, b.index_type

          from user_ind_columns a,user_indexes b

          where a.index_name=b.index_name and a.table_name='&1';

          求索引中行數較多的

          select index_name,blevel,num_rows,CLUSTERING_FACTOR,status from user_indexes where num_rows > 10000 and blevel > 0

          select table_name,index_name,blevel,num_rows,CLUSTERING_FACTOR,status from user_indexes where status <> 'VALID'

          --求當前會話的SID,SERIAL#

          select sid, serial# from v$session where audsid = SYS_CONTEXT('USERENV','SESSIONID');

          --求表空間的未用空間

          col mbytes format 9999.9999

          select tablespace_name,sum(bytes)/1024/1024 mbytes from dba_free_space group by tablespace_name;

          --求表中定義的觸發器

          select table_name,index_type,index_name,uniqueness from user_indexes where table_name='&1';

          select trigger_name from user_triggers where table_name='&1';

          --求未定義索引的表

          select table_name from user_tables where table_name not in (select table_name from user_ind_columns);

          --執行常用的過程

          exec print_sql('select count(*) from tab');

          exec show_space2('table_name');

          --求free memory

          select * from v$sgastat where name='free memory';

          select a.name,sum(b.value) from v$statname a,v$sesstat b where a.statistic# = b.statistic# group by a.name;

          查看一下誰在使用那個可以得回滾段,或者查看一下某個可以得用戶在使用回滾段,

          找出領回滾段不斷增長的事務,再看看如何處理它,是否可以將它commit,再不行

          就看看能否kill它,等等,查看當前正在使用的回滾段的用戶信息和回滾段信息:

          set linesize 121

          SELECT r.name "ROLLBACK SEGMENT NAME ",l.sid "ORACLE PID",p.spid "SYSTEM PID ",s.username "ORACLE USERNAME"

          FROM v$lock l, v$process p, v$rollname r, v$session s

          WHERE l.sid = p.pid(+) AND s.sid=l.sid AND TRUNC(l.id1(+)/65536) = r.usn AND l.type(+) = 'TX' AND l.lmode(+) = 6 ORDER BY r.name;

          --查看用戶的回滾段的信息

          select s.username, rn.name from v$session s, v$transaction t, v$rollstat r, v$rollname rn

          where s.saddr = t.ses_addr and t.xidusn = r.usn and r.usn = rn.usn

          --生成執行計劃

          explain plan set statement_id='a1' for &1;

          --查看執行計劃

          select lpad(' ',2*(level-1))||operation operation,options,OBJECT_NAME,position from plan_table

          start with id=0 and statement_id='a1' connect by prior id=parent_id and statement_id='a1'

          --查看內存中存的使用

          select decode(greatest(class,10),10,decode(class,1,'Data',2,'Sort',4,'Header',to_char(class)),'Rollback') "Class",

          sum(decode(bitand(flag,1),1,0,1)) "Not Dirty",sum(decode(bitand(flag,1),1,1,0)) "Dirty",

          sum(dirty_queue) "On Dirty",count(*) "Total"

          from x$bh group by decode(greatest(class,10),10,decode(class,1,'Data',2,'Sort',4,'Header',to_char(class)),'Rollback');

          --查看表空間狀態

          select tablespace_name,extent_management,segment_space_management from dba_tablespaces;

          select table_name,freelists,freelist_groups from user_tables;

          --查看系統請求情況

          SELECT DECODE (name, 'summed dirty write queue length', value)/

          DECODE (name, 'write requests', value) "Write Request Length"

          FROM v$sysstat WHERE name IN ( 'summed dirty queue length', 'write requests') and value>0;

          --計算data buffer命中率

          select a.value + b.value "logical_reads", c.value "phys_reads",

          round(100 * ((a.value+b.value)-c.value) / (a.value+b.value)) "BUFFER HIT RATIO"

          from v$sysstat a, v$sysstat b, v$sysstat c

          where a.statistic# = 40 and b.statistic# = 41 and c.statistic# = 42;

          SELECT name, (1-(physical_reads/(db_block_gets+consistent_gets)))*100 H_RATIO FROM v$buffer_pool_statistics;

          --查看內存使用情況

          select least(max(b.value)/(1024*1024),sum(a.bytes)/(1024*1024)) shared_pool_used,

          max(b.value)/(1024*1024) shared_pool_size,greatest(max(b.value)/(1024*1024),sum(a.bytes)/(1024*1024))-

          (sum(a.bytes)/(1024*1024)) shared_pool_avail,((sum(a.bytes)/(1024*1024))/(max(b.value)/(1024*1024)))*100 avail_pool_pct

          from v$sgastat a, v$parameter b where (a.pool='shared pool' and a.name not in ('free memory')) and b.name='shared_pool_size';

          --查看用戶使用內存情況

          select username, sum(sharable_mem), sum(persistent_mem), sum(runtime_mem)

          from sys.v_$sqlarea a, dba_users b

          where a.parsing_user_id = b.user_id group by username;

          --查看對象的緩存情況

          select OWNER,NAMESPACE,TYPE,NAME,SHARABLE_MEM,LOADS,EXECUTIONS,LOCKS,PINS,KEPT

          from v$db_object_cache where type not in ('NOT LOADED','NON-EXISTENT','VIEW','TABLE','SEQUENCE')

          and executions>0 and loads>1 and kept='NO' order by owner,namespace,type,executions desc;

          select type,count(*) from v$db_object_cache group by type;

          --查看庫緩存命中率

          select namespace,gets, gethitratio*100 gethitratio,pins,pinhitratio*100 pinhitratio,RELOADS,INVALIDATIONS from v$librarycache

          --查看某些用戶的hash

          select a.username, count(b.hash_value) total_hash,count(b.hash_value)-count(unique(b.hash_value)) same_hash,

          (count(unique(b.hash_value))/count(b.hash_value))*100 u_hash_ratio

          from dba_users a, v$sqlarea b where a.user_id=b.parsing_user_id group by a.username;

          --查看字典命中率

          select (sum(getmisses)/sum(gets)) ratio from v$rowcache;

          --查看undo段的使用情況

          SELECT d.segment_name,extents,optsize,shrinks,aveshrink,aveactive,d.status

          FROM v$rollname n,v$rollstat s,dba_rollback_segs d

          WHERE d.segment_id=n.usn(+) and d.segment_id=s.usn(+);

          --無效的對象

          select owner,object_type,object_name from dba_objects where status='INVALID';

          select constraint_name,table_name from dba_constraints where status='INVALID';

          --求出某個進程,并對它進行跟蹤

          select s.sid,s.serial# from v$session s,v$process p where s.paddr=p.addr and p.spid=&1;

          exec dbms_system.SET_SQL_TRACE_IN_SESSION(&1,&2,true);

          exec dbms_system.SET_SQL_TRACE_IN_SESSION(&1,&2,false);

          --求出鎖定的對象

          select do.object_name,session_id,process,locked_mode

          from v$locked_object lo, dba_objects do where lo.object_id=do.object_id;

          --求當前session的跟蹤文件

          SELECT p1.value || '/' || p2.value || '_ora_' || p.spid || '.ora' filename

          FROM v$process p, v$session s, v$parameter p1, v$parameter p2

          WHERE p1.name = 'user_dump_dest' AND p2.name = 'instance_name'

          AND p.addr = s.paddr AND s.audsid = USERENV('SESSIONID') AND p.background is null AND instr(p.program,'CJQ') = 0;

          --求對象所在的文件及塊號

          select segment_name,header_file,header_block

          from dba_segments where segment_name like '&1';

          --求對象發生事務時回退段及塊號

          select a.segment_name,a.header_file,a.header_block

          from dba_segments a,dba_rollback_segs b

          where a.segment_name=b.segment_name and b.segment_id='&1'

          --9i的在線重定義表

          /*如果在線重定義的表沒有主鍵需要創建主鍵*/

          exec dbms_redefinition.can_redef_table('cybercafe','announcement');

          create table anno2 as select * from announcement

          exec dbms_redefinition.start_redef_table('cybercafe','announcement','anno2');

          exec dbms_redefinition.sync_interim_table('cybercafe','announcement','anno2');

          exec dbms_redefinition.finish_redef_table('cybercafe','announcement','anno2');

          drop table anno2

          exec dbms_redefinition.abort_redef_table('cybercafe','announcement','anno2');

          --常用的logmnr腳本(cybercafe)

          exec sys.dbms_logmnr_d.build(dictionary_filename =>'esal',dictionary_location =>'/home/oracle/logmnr');

          exec sys.dbms_logmnr.add_logfile(logfilename=>'/home/oracle/oradata/esal/archive/1_24050.dbf', ptions=>sys.dbms_logmnr.new);

          exec sys.dbms_logmnr.add_logfile(logfilename=>'/home/oracle/oradata/esal/archive/1_22912.dbf', ptions=>sys.dbms_logmnr.addfile);

          exec sys.dbms_logmnr.add_logfile(logfilename=>'/home/oracle/oradata/esal/archive/1_22913.dbf', ptions=>sys.dbms_logmnr.addfile);

          exec sys.dbms_logmnr.add_logfile(logfilename=>'/home/oracle/oradata/esal/archive/1_22914.dbf', ptions=>sys.dbms_logmnr.addfile);

          exec sys.dbms_logmnr.start_logmnr(dictfilename=>'/home/oracle/logmnr/esal.ora');

          create table logmnr2 as select * from v$logmnr_contents;

          --與權限相關的字典

          ALL_COL_PRIVS表示列上的授權,用戶和PUBLIC是被授予者

          ALL_COL_PRIVS_MADE表示列上的授權,用戶是屬主和被授予者

          ALL_COL_RECD表示列上的授權,用戶和PUBLIC是被授予者

          ALL_TAB_PRIVS表示對象上的授權,用戶是PUBLIC或被授予者或用戶是屬主

          ALL_TAB_PRIVS_MADE表示對象上的權限,用戶是屬主或授予者

          ALL_TAB_PRIVS_RECD表示對象上的權限,用戶是PUBLIC或被授予者

          DBA_COL_PRIVS數據庫列上的所有授權

          DBA_ROLE_PRIVS顯示已授予用戶或其他角色的角色

          DBA_SYS_PRIVS已授予用戶或角色的系統權限

          DBA_TAB_PRIVS數據庫對象上的所有權限

          ROLE_ROLE_PRIVS顯示已授予用戶的角色

          ROLE_SYS_PRIVS顯示通過角色授予用戶的系統權限

          ROLE_TAB_PRIVS顯示通過角色授予用戶的對象權限

          SESSION_PRIVS顯示用戶現在可利用的所有系統權限

          USER_COL_PRIVS顯示列上的權限,用戶是屬主、授予者或被授予者

          USER_COL_PRIVS_MADE顯示列上已授予的權限,用戶是屬主或授予者

          USER_COL_PRIVS_RECD顯示列上已授予的權限,用戶是屬主或被授予者

          USER_ROLE_PRIVS顯示已授予給用戶的所有角色

          USER_SYS_PRIVS顯示已授予給用戶的所有系統權限

          USER_TAB_PRIVS顯示已授予給用戶的所有對象權限

          USER_TAB_PRIVS_MADE顯示已授予給其他用戶的對象權限,用戶是屬主

          USER_TAB_PRIVS_RECD顯示已授予給其他用戶的對象權限,用戶是被授予者

          --如何用dbms_stats分析表及模式?

          exec dbms_stats.gather_schema_stats(ownname=>'&USER_NAME',estimate_percent=>dbms_stats.auto_sample_size,

          method_opt => 'for all columns size auto',degree=> DBMS_STATS.DEFAULT_DEGREE);

          exec dbms_stats.gather_schema_stats(ownname=>'&USER_NAME',estimate_percent=>dbms_stats.auto_sample_size,cascade=>true);

          /*

          FOR ALL [INDEXED | HIDDEN] COLUMNS [size_clause]

          FOR COLUMNS [size clause] column|attribute [size_clause] [,column|attribute [size_clause]...],

          where size_clause is defined as size_clause := SIZE {integer | REPEAT | AUTO | SKEWONLY}

          integer--Number of histogram buckets. Must be in the range [1,254].

          REPEAT--Collects histograms only on the columns that already have histograms.

          AUTO--Oracle determines the columns to collect histograms based on data distribution and the workload of the columns.

          SKEWONLY--Oracle determines the columns to collect histograms based on the data distribution of the columns

          */
          報表縱列改為橫列展示:
          select case b.index_type
          when 1 then
          b.index_value
          else
          '0'
          end,
          case b.index_type
          when 2 then
          b.index_value
          else
          '0'
          end,
          case b.index_type
          when 3 then
          b.index_value
          else
          '0'
          end
          from TB_AUDIT_RATIO a, TB_AUDIT_INSTANCE b
          where a.audit_type = 'DD'
          and a.table_code = 'DAPDcdrstandfeeday'
          and a.index_id = b.index_id
          and b.lan_id = 701
          order by a.table_code, a.index_id
          9.5 I18N formatting 標簽庫
          看到 I18N 就應該想到知識“國際化”, I18N formatting 標簽庫就是用于在 JSP 頁面中做國際化的動作。在該標簽庫中的標簽一共有 12 個,被分為了兩類,分別是:

          q 國際化核心標簽: <fmt:setLocale> 、 <fmt:bundle> 、 <fmt:setBundle> 、 <fmt:message> 、 <fmt:param> 、 <fmt:requestEncoding> 。

          q 格式化標簽: <fmt:timeZone> 、 <fmt:setTimeZone> 、 <fmt:formatNumber> 、 <fmt:parseNumber> 、 <fmt:formatDate> 、 <fmt:parseDate> 。

          下面只選擇其中常見的一些標簽和屬性進行介紹。

          9.5.1 用于設置本地化環境的 <fmt:setLocale> 標簽
          <fmt:setLocale> 標簽用于設置 Locale 環境。它的屬性和描述如表 9.17 所示:

          表 9.17   <fmt:setLocale> 標簽屬性和說明

          屬性
          描述

          value
          Locale 環境的指定,可以是 java.util.Locale 或 String 類型的實例

          scope
          Locale 環境變量的作用范圍(可選)


          下面看一個示例:

          <fmt:setLocale value="zh_TW"/>

          表示設置本地環境為繁體中文。

          9.5.2 用于資源文件綁定的 <fmt:bundle> 、 <fmt:setBundle> 標簽
          這兩組標簽用于資源配置文件的綁定,唯一不同的是 <fmt:bundle> 標簽將資源配置文件綁定于它標簽體中的顯示, <fmt:setBundle> 標簽則允許將資源配置文件保存為一個變量,在之后的工作可以根據該變量來進行。

          根據 Locale 環境的不同將查找不同后綴的資源配置文件,這點在國際化的任何技術上都是一致的,通常來說,這兩種標簽單獨使用是沒有意義的,它們都會與 I18N formatting 標簽庫中的其他標簽配合使用。它們的屬性和描述如表 9.18 所示:

          表 9.18   <fmt:bundle> 、 <fmt:setBundle> 標簽屬性和說明

          屬性
          描述

          basename
          資源配置文件的指定,只需要指定文件名而無須擴展名,二組標簽共有的屬性

          var
          <fmt:setBundle> 獨有的屬性,用于保存資源配置文件為一個變量

          scope
          變量的作用范圍


          下面看一個示例

          <fmt:setLocale value="zh_CN"/>

          <fmt:setBundle basename="applicationMessage" var="applicationBundle"/>

          該示例將會查找一個名為 applicationMessage_zh_CN.properties 的資源配置文件,來作為顯示的 Resource 綁定。

          9.5.3 用于顯示資源配置文件信息的 <fmt:message> 標簽
          用于信息顯示的標簽,將顯示資源配置文件中定義的信息。它的屬性和描述如表 9.19 所示:

          表 9.19   <fmt:message> 標簽屬性和說明

          屬性
          描述

          key
          資源配置文件的“鍵”指定

          bundle
          若使用 <fmt:setBundle> 保存了資源配置文件,該屬性就可以從保存的資源配置文件中進行查找

          var
          將顯示信息保存為一個變量

          scope
          變量的作用范圍


          下面看一個示例:

          <fmt:setBundle basename="applicationMessage" var="applicationBundle"/>

          <fmt:bundle basename="applicationAllMessage">

          <fmt:message key="userName" />

          <p>

          <fmt:message key="passWord" bundle="${applicationBundle}" />

          </fmt:bundle>

          該示例使用了兩種資源配置文件的綁定的做法,“ applicationMessage ”資源配置文件利用 <fmt:setBundle> 標簽被賦于了變量“ applicationBundle ”,而作為 <fmt:bundle> 標簽定義的“ applicationAllMessage ”資源配置文件作用于其標簽體內的顯示。

          q 第一個 <fmt:message> 標簽將使用“ applicationAllMessage ”資源配置文件中“鍵”為“ userName ”的信息顯示。

          q 第二個 <fmt:message> 標簽雖然被定義在 <fmt:bundle> 標簽體內,但是它使用了 bundle 屬性,因此將指定之前由 <fmt:setBundle> 標簽保存的“ applicationMessage ”資源配置文件,該“鍵”為“ passWord ”的信息顯示。

          9.5.4 用于參數傳遞的 <fmt:param> 標簽
          <fmt:param> 標簽應該位于 <fmt:message> 標簽內,將為該消息標簽提供參數值。它只有一個屬性 value 。

          <fmt:param> 標簽有兩種使用版本,一種是直接將參數值寫在 value 屬性中,另一種是將參數值寫在標簽體內。

          9.5.6 用于為請求設置字符編碼的 <fmt:requestEncoding> 標簽
          <fmt:requestEncoding> 標簽用于為請求設置字符編碼。它只有一個屬性 value ,在該屬性中可以定義字符編碼。

          9.5.7 用于設定時區的 <fmt:timeZone> 、 <fmt:setTimeZone> 標簽
          這兩組標簽都用于設定一個時區。唯一不同的是 <fmt:timeZone> 標簽將使得在其標簽體內的工作可以使用該時區設置, <fmt:setBundle> 標簽則允許將時區設置保存為一個變量,在之后的工作可以根據該變量來進行。它們的屬性和描述如表 9.20 所示:

          表 9.20   <fmt:timeZone> 、 <fmt:setTimeZone> 標簽 屬性和說明

          屬性
          描述

          value
          時區的設置

          var
          <fmt:setTimeZone> 獨有的屬性,用于保存時區為一個變量

          scope
          變量的作用范圍


          9.5.8 用于格式化數字的 <fmt:formatNumber> 標簽
          <fmt: formatNumber > 標 簽用于格式化數字。它的屬性和描述如表 9.21 所示:

          表 9.21   <fmt:formatNumber> 標簽屬性和說明

          屬性
          描述

          value
          格式化的數字,該數值可以是 String 類型或 java.lang.Number 類型的實例

          type
          格式化的類型

          pattern
          格式化模式

          var
          結果保存變量

          scope
          變量的作用范圍

          maxIntegerDigits
          指定格式化結果的最大值

          minIntegerDigits
          指定格式化結果的最小值

          maxFractionDigits
          指定格式化結果的最大值,帶小數

          minFractionDigits
          指定格式化結果的最小值,帶小數


          <fmt:formatNumber> 標簽實際是對應 java.util.NumberFormat 類, type 屬性的可能值包括 currency (貨幣)、 number (數字)和 percent (百分比)。

          下面看一個示例。

          <fmt:formatNumber value="1000.888" type="currency" var="money"/>

          該結果將被保存在“ money ”變量中,將根據 Locale 環境顯示當地的貨幣格式。


          9.5.9 用于解析數字的 <fmt:parseNumber> 標簽
          <fmt:parseNumber> 標簽用于解析一個數字,并將結果作為 java.lang.Number 類的實例返回。 <fmt:parseNumber> 標簽看起來和 <fmt:formatNumber> 標簽的作用正好相反。它的屬性和描述如表 9.22 所示:

          表 9.22   <fmt:parseNumber> 標簽屬性和說明

          屬性
          描述

          value
          將被解析的字符串

          type
          解析格式化的類型

          pattern
          解析格式化模式

          var
          結果保存變量,類型為 java.lang.Number

          scope
          變量的作用范圍

          parseLocale
          以本地化的形式來解析字符串,該屬性的內容應為 String 或 java.util.Locale 類型的實例


          下面看一個示例。

          <fmt:parseNumber value="15%" type="percent" var="num"/>

          解析之后的結果為“ 0.15 ”。

          9.5.10 用于格式化日期的 <fmt:formatDate> 標簽
          <fmt:formatDate> 標簽用于格式化日期。它的屬性和描述如表 9.23 所示:

          表 9.23   <fmt:formatDate> 標簽屬性和說明

          屬性
          描述

          value
          格式化的日期,該屬性的內容應該是 java.util.Date 類型的實例

          type
          格式化的類型

          pattern
          格式化模式

          var
          結果保存變量

          scope
          變量的作用范圍

          timeZone
          指定格式化日期的時區


          <fmt:formatDate> 標簽與 <fmt:timeZone> 、 <fmt:setTimeZone> 兩組標簽的關系密切。若沒有指定 timeZone屬性, 也可以通過 <fmt:timeZone> 、 <fmt:setTimeZone> 兩組標簽設定的時區來格式化最后的結果。

          9.5.11 用于解析日期的 <fmt:parseDate> 標簽
          <fmt:parseDate> 標簽用于解析一個日期,并將結果作為 java.lang.Date 類型的實例返回。 <fmt:parseDate> 標簽看起來和 <fmt:formatDate> 標簽的作用正好相反。它的屬性和描述如表 9.24 所示:

          表 9.24   <fmt:parseDate> 標簽屬性和說明

          屬性
          描述

          value
          將被解析的字符串

          type
          解析格式化的類型

          pattern
          解析格式化模式

          var
          結果保存變量,類型為 java.lang.Date

          scope
          變量的作用范圍

          parseLocale
          以本地化的形式來解析字符串,該屬性的內容為 String 或 java.util.Locale 類型的實例

          timeZone
          指定解析格式化日期的時區


          <fmt:parseNumber> 和 <fmt:parseDate> 兩組標簽都實現解析字符串為一個具體對象實例的工作,因此,這兩組解析標簽對 var 屬性的字符串參數要求非常嚴格。就 JSP 頁面的表示層前段來說,處理這種解析本不屬于份內之事,因此 <fmt:parseNumber> 和 <fmt:parseDate> 兩組標簽應該盡量少用,替代工作的地方應該在服務器端表示層的后段,比如在 Servlet 中。

          messageSource[Spring]主要用于消息、日志[Locale.getDefault()]
          jstl I18N 主要用于jsp頁面。[ ]
          <beans>
          <!-- this MessageSource is being used in a web application -->
          <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
          <property name="baseName" value="WEB-INF/test-messages"/>
          </bean>
          <!-- let's inject the above MessageSource into this POJO -->
          <bean id="example" class="com.foo.Example">
          <property name="messages" ref="messageSource"/>
          </bean>
          </beans>
          String message = resources.getMessage("argument.required",
          new Object [] {"userDao"}, "Required", Locale.getDefault());
          使用JSTL解決國際化問題非常簡單,首先在WEB-INF/classes放上資源文件,例如messages.properties、messages_zh_CN.properties等文件。

          使用JSTL fmt庫:
          <%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt" %>
          <fmt:setLocale value="${header['accept-language']}"/>
          <fmt:setBundle basename="messages"/>

          setLocale設置地區,一般從HTTP Header里面取就比較方便一點。
          setBundle設置資源文件的名稱。

          通過如下方式就可以應用了。
          <fmt:message key="SampleMessage"/>

          還可以加參數。
          <fmt:message key="LoginMessage">
          <fmt:param value="${loginName}"/>
          </fmt:message>
          <%@page contentType="text/html; charset=UTF-8"%>
          <%@page import="java.util.*"%>
          <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
          <%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
          <%@taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
          <%@taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x"%>
          <html>
          <head>
          <title>language choose</title>
          </head>
          <body bgcolor="#ffffff">

          copyright @ lizongbo @ donews.net


          <c:if test="${param['locale'] != null}">
          <fmt:setLocale value="${param['locale']}" scope="session"/>
          <fmt:setTimeZone value="${param['locale']}" scope="session"/>
          </c:if>
          <c:if test="${param['locale'] == null}">
          <fmt:setLocale value="${header['locale']}" scope="session"/>
          <fmt:setTimeZone value="${header['locale']}" scope="session"/>
          </c:if>
          <%
          Locale crtl = Locale.getDefault();
          Object cobj = session.getAttribute("javax.servlet.jsp.jstl.fmt.locale.session");
          if (cobj != null && cobj instanceof Locale) {
          crtl = (Locale) cobj;
          }
          Locale[] la = java.text.NumberFormat.getAvailableLocales();
          %>
          <form method="POST" action="">
          language choose:
          <br />
          <select name="locale">
          <%for (int i = 0; i < la.length; i++) {%>
          <option value="<%=la[i]%>" <%if (la[i].equals(crtl)) {
          out.print("selected=\"selected\"");
          }%>><%= la[i].getDisplayName(crtl)%></option>
          <%
          }
          %>
          </select>
          <br />
          <input type="submit" value="change"/>
          </form>
          </body>
          </html>


          re: native2ascii用法[未登錄] xzc 2008-11-22 16:20  
          import java.util.Locale;

          public class EchoDefaultSystemEncoding {

          public static void main(String[] args) {

          String encoding = System.getProperty("file.encoding");
          System.out.println("Default System Encoding:" + encoding);

          System.out.println("Locale.getDefault()=" + Locale.getDefault());

          System.out.println("系統參數");
          System.getProperties().list(System.out);
          }
          }
          Runtime.getRuntime().exec("java -cp class2.jar com.Test a \"b c d\"")
          ETLImplProgDAO etlImplProgDAO = (ETLImplProgDAO) Class.forName("com.Test").newInstance();
          rtn = etlImplProgDAO.execute(workItemType, regionId, dataStime, dataEtime);
          java Test a b
          輸出到文件 RollingFileAppender的擴展,可以提供一種日志的備份功能。
          log4j.appender.R=org.apache.log4j.RollingFileAppender


          日志文件的名稱
          log4j.appender.R.File=log4j.log
          日志文件的大小
          log4j.appender.R.MaxFileSize=100KB
          保存一個備份文件
          log4j.appender.R.MaxBackupIndex=1

          log4j.appender.R.layout=org.apache.log4j.TTCCLayout

          在文件后面繼續寫

          log4j.appender.ROLLING_FILE.Append=true

          設置配置文件的編碼

          log4j.appender.ROLLING_FILE.encoding=UTF-8
          輸出到文件 RollingFileAppender的擴展,可以提供一種日志的備份功能。
          log4j.appender.R=org.apache.log4j.RollingFileAppender


          日志文件的名稱
          log4j.appender.R.File=log4j.log
          日志文件的大小
          log4j.appender.R.MaxFileSize=100KB
          保存一個備份文件
          log4j.appender.R.MaxBackupIndex=1

          log4j.appender.R.layout=org.apache.log4j.TTCCLayout

          在文件后面繼續寫

          log4j.appender.ROLLING_FILE.Append=true

          設置配置文件的編碼

          log4j.appender.ROLLING_FILE.encoding=UTF-8

          select * from v$database;
          select * from v$instance;
          select * from v$parameter;
          Db_name:對一個數據庫(Oracle database)的唯一標識,該數據庫為第一章講到的Oracle database。這種表示對于單個數據庫是足夠的,但是隨著由多個數據庫構成的分布式數據庫的普及,這種命令數據庫的方法給數據庫的管理造成一定的負擔,因為各個數據庫的名字可能一樣,造成管理上的混亂。為了解決這種情況,引入了Db_domain參數,這樣在數據庫的標識是由Db_name和Db_domain兩個參數共同決定的,避免了因為數據庫重名而造成管理上的混亂。這類似于互連網上的機器名的管理。我們將Db_name和Db_domain兩個參數用’.’連接起來,表示一個數據庫,并將該數據庫的名稱稱為Global_name,即它擴展了Db_name。Db_name參數只能由字母、數字、’_’、’#’、’$’組成,而且最多8個字符。

          Db_domain:定義一個數據庫所在的域,該域的命名同互聯網的’域’沒有任何關系,只是數據庫管理員為了更好的管理分布式數據庫而根據實際情況決定的。當然為了管理方便,可以將其等于互聯網的域。

          Global_name:對一個數據庫(Oracle database)的唯一標識,oracle建議用此種方法命令數據庫。該值是在創建數據庫是決定的,缺省值為Db_name. Db_domain。在以后對參數文件中Db_name與Db_domain參數的任何修改不影響Global_name的值,如果要修改Global_name,只能用ALTER DATABASE RENAME GLOBAL_NAME TO <db_name.db_domain>命令進行修改,然后修改相應參數。

          Service_name:該參數是oracle8i新引進的。在8i以前,我們用SID來表示標識數據庫的一個實例,但是在Oracle的并行環境中,一個數據庫對應多個實例,這樣就需要多個網絡服務名,設置繁瑣。為了方便并行環境中的設置,引進了Service_name參數,該參數對應一個數據庫,而不是一個實例,而且該參數有許多其它的好處。該參數的缺省值為Db_name. Db_domain,即等于Global_name。一個數據庫可以對應多個Service_name,以便實現更靈活的配置。該參數與SID沒有直接關系,即不必Service name 必須與SID一樣。

          Net service name:網絡服務名,又可以稱為數據庫別名(database alias)。是客戶端程序訪問數據庫時所需要,屏蔽了客戶端如何連接到服務器端的細節,實現了數據庫的位置透明的特性
          DECLARE
          v_cursor NUMBER;
          v_stat NUMBER;
          v_row NUMBER;
          v_id NUMBER;
          v_no VARCHAR(100);
          v_date DATE;
          v_sql VARCHAR(200);
          s_id NUMBER;
          s_date DATE;
          BEGIN
          s_id := 3000;
          s_date := SYSDATE;
          v_sql := 'SELECT id,qan_no,sample_date FROM "tblno" WHERE id > :sid and sample_date < :sdate';
          v_cursor := dbms_sql.open_cursor; --打開游標;
          dbms_sql.parse(v_cursor, v_sql, dbms_sql.native); --解析動態SQL語句;
          dbms_sql.bind_variable(v_cursor, ':sid', s_id); --綁定輸入參數;
          dbms_sql.bind_variable(v_cursor, ':sdate', s_date);

          dbms_sql.define_column(v_cursor, 1, v_id); --定義列
          dbms_sql.define_column(v_cursor, 2, v_no, 100);
          dbms_sql.define_column(v_cursor, 3, v_date);
          v_stat := dbms_sql.execute(v_cursor); --執行動態SQL語句。
          LOOP
          EXIT WHEN dbms_sql.fetch_rows(v_cursor)<=0; --fetch_rows在結果集中移動游標,如果未抵達末尾,返回1。
          dbms_sql.column_value(v_cursor, 1, v_id); --將當前行的查詢結果寫入上面定義的列中。
          dbms_sql.column_value(v_cursor, 2, v_no);
          dbms_sql.column_value(v_cursor, 3, v_date);
          dbms_output.put_line(v_id || ';' || v_no || ';' || v_date);
          END LOOP;
          dbms_sql.close_cursor(v_cursor); --關閉游標。
          END;



          re: Oracle觸發器 xzc 2008-05-28 14:49  
          語法規則:
          Create [or replace] trigger [模式.]觸發器名
          Before| after insert|delete|(update of 列名)

          On 表名

          [for each row]

          When 條件

          PL/SQL塊

          說明:

          For each row的意義是:在一次操作表的語句中,每操作成功一行就會觸發一次;不寫的話,表示是表級觸發器,則無論操作多少行,都只觸發一次;

          When條件的出現說明了,在DML操作的時候也許一定會觸發觸發器,但是觸發器不一定會做實際的工作,比如when 后的條件不為真的時候,觸發器只是簡單地跳過了PL/SQL塊;

          例子:

          sql 代碼
          create or replace trigger wf_tri_user_list before insert or update or delete on user_list
          for each row
          declare
          uid varchar2(10); useq varchar2(10); asql varchar2(200); namea varchar2(200); nameb varchar2(200);
          begin
          namea:=NULL;
          nameb:=NULL;
          if inserting then
          insert into wflow.bpm_org_user(userid,username,diaplayname,seq) values(:NEW.user_id,:NEW.user_name,:NEW.user_realname,:NEW.user_id);
          dbms_output.put_line('insert trigger is chufale .....');

          end if;
          if updating then
          if (:NEW.user_name<>:OLD.user_name) and (:NEW.user_realname<>:OLD.user_realname) then
          namea:=:NEW.user_name;
          nameb:=:NEW.user_realname;
          asql:='update wflow.bpm_org_user set diaplayname=:1 where username=:2';
          execute immediate asql using namea,nameb;
          else
          if :NEW.user_name<>:OLD.user_name then
          namea:=:NEW.user_name;
          asql:='update wflow.bpm_org_user set user_name=:1 where username=:2';
          execute immediate asql using namea;
          else
          if :NEW.user_realname<>:OLD.user_realname then
          nameb:=:NEW.user_realname;
          asql:='update wflow.bpm_org_user set diaplayname=:1 where username=:2';
          execute immediate asql using nameb,:OLD.user_id;
          end if;
          end if;
          end if;
          end if;
          if deleting then
          update wflow.bpm_org_jobusers set userid = 0 where :OLD.user_id =userid and parentid=-1;
          delete from wflow.bpm_org_jobusers where userid = :OLD.user_id;
          delete wflow.bpm_org_user where userid=:OLD.user_id;
          end if;
          commit;
          end;




          關鍵字:

          :NEW 和:OLD使用方法和意義,new 只出現在insert和update時,old只出現在update和delete時。在insert時new表示新插入的行數據,update時new表示要替換的新數據、old表示要被更改的原來的數據行,delete時old表示要被刪除的數據。

          注意:

          在觸發器中不能使用commit。
          TYPE cursor_type IS REF CURSOR;
          c1 cursor_type;
          --
          OPEN c1 FOR lc_sql;
          LOOP
          FETCH c1
          INTO lc_source_column_pk_value, lc_source_column_npk_value;
          EXIT WHEN c1%NOTFOUND;
          null;
          END LOOP;
          <<ERROREND>>
          CLOSE c1;
          ----定義
          type cursor_type is ref cursor;
          c1 cursor_type;
          ----使用
          --打開動態游標,再往下就都一樣了
          open c1 for sql2;
          loop
          fetch c1 into r_c1;
          exit when c1%notfound;
          DailyRollingFileAppender的使用
          DailyRollingFileAppender是日志記錄軟件包Log4J中的一個Appender,它能夠按一定的頻度滾動日志記錄文件。

          如果您不熟悉Log4J,那我們建議您閱讀一下 使用Log4j進行日志記錄。

          我們可以按下面的方式配置DailyRollingFileAppender:

          log4j.rootCategory=INFO,file
          log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
          log4j.appender.file.DatePattern='.'yyyy-MM-dd
          log4j.appender.file.File=run.log
          log4j.appender.file.Append=true
          log4j.appender.file.Threshold=INFO
          log4j.appender.file.layout=org.apache.log4j.PatternLayout
          log4j.appender.file.layout.ConversionPattern=%c %x - %m%n
          在DailyRollingFileAppender中可以指定monthly(每月)、weekly(每周)、daily(每天)、half-daily(每半天)、hourly(每小時)和minutely(每分鐘)六個頻度,這是通過為DatePattern選項賦予不同的值來完成的。DatePattern選項的有效值為:

          '.'yyyy-MM,對應monthly(每月)
          '.'yyyy-ww,對應weekly(每周)
          '.'yyyy-MM-dd,對應daily(每天)
          '.'yyyy-MM-dd-a,對應half-daily(每半天)
          '.'yyyy-MM-dd-HH,對應hourly(每小時)
          '.'yyyy-MM-dd-HH-mm,對應minutely(每分鐘)
          DatePattern中不用處理的文字要放到單引號(')中,如上面的(.)。如果您對此有疑問可以查閱SimpleDateFormat的文檔。DailyRollingFileAppender中使用這個類來處理DatePattern。

          DatePattern格式化之后的文本作為文件名字的后綴。DailyRollingFileAppender不支持格式化之后的文本作為文件名字的前綴。

          DailyRollingFileAppender在每一個日志事件(LoggingEvent)附加(append)之前檢查是否需要附加。也就是說如果在一個滾動區間中沒有任何日志記錄,那么這個區間的日志記錄文件就不會形成。

          查閱DailyRollingFileAppender的JavaDoc文檔。

          re: JOB[未登錄] xzc 2007-11-26 14:48  
          begin
          sys.dbms_job.submit(job => :job,
          what => 'check_err;',
          next_date => trunc(sysdate)+23/24,
          interval => 'trunc(next_day(sysdate,''星期五''))+23/24');
          coMMit;
          end;
          其中:job是系統自動產生編號,check_err是我的一個過程,next_date設置下次執行時間,這里是今天晚上23:00,interval設置時間間隔,多久執行一次,這里是每周的星期五晚上23:00,函數next_day返回日期中包含指定字符的日期,trunc 函數去掉日期里的時間,也就是得到的是某天的00:00,時間是以天為單位的所以要得到某某點某某分,就需要分數:

          1/24 一小時;
          1/1440 一分;
          1/3600 一秒;

          謝謝,請給我也發一份。
          xzc0202@gmail.com
          select translate('1224312321','\0123456789','\') from dual;

          不用存儲過程查出字符串中是否含有字母
          create table aa (aa varchar2(20));
          insert into aa values ('221324');
          insert into aa values ('23kkj23');
          insert into aa values ('asfsf');
          insert into aa values ('33DS32sd34');

          用下面SQL就可以查出
          select * from aa
          where aa!=translate(aa,'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz','0123456789');



          create or replace function num(s in varchar2) return number
          is
          begin
          return to_number(s) ;
          exception
          when others then
          return null;
          end;
          一、語法:
          TRANSLATE(string,from_str,to_str)
          二、目的
          返回將(所有出現的)from_str中的每個字符替換為to_str中的相應字符以后的string。TRANSLATE 是 REPLACE 所提供的功能的一個超集。如果 from_str 比 to_str 長,那么在 from_str 中而不在 to_str 中的額外字符將從 string 中被刪除,因為它們沒有相應的替換字符。to_str 不能為空。Oracle 將空字符串解釋為 NULL,并且如果TRANSLATE 中的任何參數為NULL,那么結果也是 NULL。
          三、允許使用的位置
          過程性語句和SQL語句。
          四、示例
          SELECT TRANSLATE('abcdefghij','abcdef','123456') FROM dual;
          TRANSLATE (
          --------------
          123456ghij

          SELECT TRANSLATE('abcdefghij','abcdefghij','123456') FROM dual;
          TRANSL
          ----------
          123456

          SELECT TRANSLATE('2ABC229',
          '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ',
          '0123456789') "Translate example"
          FROM DUAL;
          --
          2229
          xzc0202@qq.com收到了,謝謝
          xzc0202@qq.com
          謝謝!
          re: oracle日期處理完全版 xzc 2007-09-14 12:57  
          ============================================

          --計算工作日方法

          create table t(s date,e date);
          alter session set nls_date_format = 'yyyy-mm-dd';
          insert into t values('2003-03-01','2003-03-03');
          insert into t values('2003-03-02','2003-03-03');
          insert into t values('2003-03-07','2003-03-08');
          insert into t values('2003-03-07','2003-03-09');
          insert into t values('2003-03-05','2003-03-07');
          insert into t values('2003-02-01','2003-03-31');

          -- 這里假定日期都是不帶時間的,否則在所有日期前加trunc即可。
          select s,e,e-s+1 total_days,
          trunc((e-s+1)/7)*5 + length(replace(substr('01111100111110',to_char(s,'d'),mod(e-s+1,7)),'0','')) work_days
          from t;

          -- drop table t;

          引此:http://www.itpub.net/showthread.php?s=1635506cd5f48b1bc3adbe4cde96f227&threadid=104060&perpage=15&pagenumber=1


          ================================================================================

          判斷當前時間是上午下午還是晚上

          SELECT CASE
          WHEN to_number(to_char(SYSDATE,'hh24')) BETWEEN 6 AND 11 THEN '上午'
          WHEN to_number(to_char(SYSDATE,'hh24')) BETWEEN 11 AND 17 THEN '下午'
          WHEN to_number(to_char(SYSDATE,'hh24')) BETWEEN 17 AND 21 THEN '晚上'
          END
          FROM dual;


          ================================================================================

          Oracle 中的一些處理日期



          將數字轉換為任意時間格式.如秒:需要轉換為天/小時
          SELECT to_char(floor(TRUNC(936000/(60*60))/24))||'天'||to_char(mod(TRUNC(936000/(60*60)),24))||'小時' FROM DUAL
          re: oracle日期處理完全版 xzc 2007-09-14 12:56  
          Oracle時間日期操作
          sysdate+(5/24/60/60) 在系統時間基礎上延遲5秒
          sysdate+5/24/60 在系統時間基礎上延遲5分鐘
          sysdate+5/24 在系統時間基礎上延遲5小時
          sysdate+5 在系統時間基礎上延遲5天
          add_months(sysdate,-5) 在系統時間基礎上延遲5月
          add_months(sysdate,-5*12) 在系統時間基礎上延遲5年


          上月末的日期:select last_day(add_months(sysdate, -1)) from dual;
          本月的最后一秒:select trunc(add_months(sysdate,1),'MM') - 1/24/60/60 from dual
          本周星期一的日期:select trunc(sysdate,'day')+1 from dual


          年初至今的天數:select ceil(sysdate - trunc(sysdate, 'year')) from dual;

          今天是今年的第幾周 :select to_char(sysdate,'fmww') from dual
          今天是本月的第幾周:SELECT TO_CHAR(SYSDATE,'WW') - TO_CHAR(TRUNC(SYSDATE,'MM'),'WW') + 1 AS "weekOfMon" FROM dual

          本月的天數
          SELECT to_char(last_day(SYSDATE),'dd') days FROM dual
          今年的天數
          select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year') from dual
          下個星期一的日期
          SELECT Next_day(SYSDATE,'monday') FROM dual
          使用J2SE API讀取Properties文件的六種方法
            
            1.使用java.util.Properties類的load()方法
            
            示例: InputStream in = lnew BufferedInputStream(new FileInputStream(name));
            Properties p = new Properties();
            p.load(in);
            
            2.使用java.util.ResourceBundle類的getBundle()方法
            
            示例: ResourceBundle rb = ResourceBundle.getBundle(name, Locale.getDefault());
            
            3.使用java.util.PropertyResourceBundle類的構造函數
            
            示例: InputStream in = new BufferedInputStream(new FileInputStream(name));
            ResourceBundle rb = new PropertyResourceBundle(in);
            
            4.使用class變量的getResourceAsStream()方法
            
            示例: InputStream in = JProperties.class.getResourceAsStream(name);
            Properties p = new Properties();
            p.load(in);
            
            5.使用class.getClassLoader()所得到的java.lang.ClassLoader的getResourceAsStream()方法
            
            示例: InputStream in = JProperties.class.getClassLoader().getResourceAsStream(name);
            Properties p = new Properties();
            p.load(in);
            
            6.使用java.lang.ClassLoader類的getSystemResourceAsStream()靜態方法
            
            示例: InputStream in = ClassLoader.getSystemResourceAsStream(name);
            Properties p = new Properties();
            p.load(in);
          常見的主要原因是JNDI 的名稱寫錯
          錯誤的調用代碼:
          public static java.sql.Connection getConnection () throws java.sql.SQLException {
          java.sql.Connection conn = null;
          try {
          Context ictx = new InitialContext();
          Context ctx = (Context) ictx.lookup("java:comp/env"); //這段代碼,很多資料介紹里都是這么寫的
          javax.sql.DataSource ds = (javax.sql.DataSource) ctx.lookup (DATA_SOURCE);
          conn = ds.getConnection();
          } catch (Exception e) {
          Debug.printErr (e.getMessage ());
          throw new SQLException ("Cannot get connection!" + e.getMessage ());
          }
          if (conn == null) throw new SQLException ("Cannot get connection!");
          return conn;
          }
          正確的應該為:
          Context ictx = new InitialContext();
          javax.sql.DataSource ds = (javax.sql.DataSource) ictx.lookup (DATA_SOURCE);
          conn = ds.getConnection();
          re: JOB xzc 2007-09-04 17:43  
          /*SET SERVEROUT ON*/
          /*聲明部分,以DECLARE開頭*/
          DECLARE
          V_DUMMY VARCHAR2(1);

          /*執行部分,以BEGIN開頭*/
          BEGIN
          SELECT DUMMY INTO V_DUMMY FROM DUAL WHERE DUMMY='&V';
          IF V_DUMMY='X' THEN
          DBMS_OUTPUT.PUT_LINE('TRUE');
          ELSE
          DBMS_OUTPUT.PUT_LINE('FALSE');
          END IF;
          /*異常處理部分,以EXCEPTION開始*/
          EXCEPTION
          WHEN NO_DATA_FOUND THEN
          DBMS_OUTPUT.PUT_LINE('NO DATA.');
          END;
          re: Oracle PL/SQL入門之慨述 xzc 2007-08-21 11:17  
          /*SET SERVEROUT ON*/
          /*聲明部分,以DECLARE開頭*/
          DECLARE
          V_DUMMY VARCHAR2(1);

          /*執行部分,以BEGIN開頭*/
          BEGIN
          SELECT DUMMY INTO V_DUMMY FROM DUAL WHERE DUMMY='&V';
          IF V_DUMMY='X' THEN
          DBMS_OUTPUT.PUT_LINE('TRUE');
          ELSE
          DBMS_OUTPUT.PUT_LINE('FALSE');
          END IF;
          /*異常處理部分,以EXCEPTION開始*/
          EXCEPTION
          WHEN NO_DATA_FOUND THEN
          DBMS_OUTPUT.PUT_LINE('NO DATA.');
          END;
          re: Log4j基本使用方法 xzc 2007-07-04 16:23  
          1. 把重要的業務日志異步批量寫入數據庫
          配置文件示例:

          log4j.logger.business=INFO,db
          log4j.appender.db=org.apache.log4j.jdbc.JDBCAppender
          log4j.appender.db.BufferSize=10
          log4j.appender.db.URL=jdbc:hsqldb:res:/hsqldb/bookstore
          log4j.appender.db.driver=org.hsqldb.jdbcDriver
          log4j.appender.db.user=sa
          log4j.appender.db.password=
          log4j.appender.db.sql=INSERT INTO SS_LOG4J_LOG (PRIORITY,LOGDATE,CLASS,METHOD,MSG) VALUES('%p','%d{yyyy-MM-dd HH:mm:ss}','%C','%M','%m')
          log4j.appender.db.layout=org.apache.log4j.PatternLayout log4j提供了簡單靈活且不影響性能的機制, 將重要業務日志寫入數據庫,方便日后的查詢:

          1. 建立一個任意命名的日志記錄表,在log4j.properties里設置連接參數,根據剛才建的表名列名,編寫插入的語句。

          2. BufferSize=10 這樣的參數可以讓日志異步批量寫入,不會影響系統性能。

          3. 業務日志log最好不要用原來的package結構,而是在項目里協調一個獨立的名字,如business。

          Log buzzLog = LogFactory.getLog("business"); 4. 以上功能的演示代碼在bookstore example 的OrderManager.java,測試代碼在bookstore example的DBLogTest.java。

          分頁
          SELECT *
          FROM (SELECT table_a.*, ROWNUM AS my_rownum
          FROM (select * from rr_tr) table_a
          WHERE ROWNUM <= 1)
          WHERE my_rownum >= 0;
          select 1,to_char(sysdate,'Day,Month DD,YYYY','NLS_DATE_LANGUAGE = American') from dual
          re: Oracle SQL 內置函數大全 xzc 2006-12-29 05:43  
          select decode(max(a.record_id),null,1,max(a.record_id)+1) from pdn_fieldchang a
          public class test{
          public static void main(String[] args){

          String str = "{0}";
          System.out.println(str);
          str = str.replaceAll("\\{0\\}","xxx");
          System.out.println(str);
          }
          }
          共3頁: 上一頁 1 2 3 
          主站蜘蛛池模板: 峨眉山市| 罗平县| 洛浦县| 丹凤县| 安庆市| 霍州市| 和林格尔县| 礼泉县| 通许县| 麟游县| 大荔县| 若羌县| 兰西县| 吉隆县| 讷河市| 浮梁县| 佛山市| 腾冲县| 阳山县| 克拉玛依市| 漯河市| 浮梁县| 嫩江县| 南昌县| 房产| 达尔| 大兴区| 安化县| 罗山县| 庆安县| 视频| 泰宁县| 九台市| 文成县| 兴义市| 米易县| 台南市| 隆尧县| 龙海市| 隆安县| 南宁市|