2011-02-07 11 views
1

Oracle 10gでストリーミング・エラーのログを出力すると、ログにはタイムスタンプ・フィールドの値は表示されません。単に古い値と新しい値として "timestamp is SYS.TIMESTAMP"を表示するだけです。実際のタイムスタンプ値を表示するようにOracleストリームを構成する方法はありますか?これらのストリーミングエラーの根本原因を適切にデバッグするには、この情報が必要です。例えばOracle Streamsエラー・ログにタイムスタンプ値が表示されない

は、次のコマンドを実行:

exec strmadmin.print_errors; 

は私たちに、この(切り捨て)エラーログ与える:誰もが興味を持っている場合は

*************************************************                  
----- ERROR #1                           
----- Local Transaction ID: 10.31.14788721                    
----- Source Database: <REMOVED>                   
----Error Number: 1403                         
----Message Text: ORA-01403: no data found 


--message: 1                            
type name: SYS.LCR$_ROW_RECORD                       
source database: <REMOVED>                     
owner: <REMOVED>                           
object: TPRODUCT                           
is tag null: Y                           
command_type: UPDATE                          
old(1): UIDPK                           
1001110                             
old(2): LAST_MODIFIED_DATE                        
typename is SYS.TIMESTAMP                    

答えて

0

を、私は、この問題に対する解決策を見つけました。

CREATE OR REPLACE PROCEDURE print_any(data IN ANYDATA) IS 
    tn VARCHAR2(61); 
    str VARCHAR2(4000); 
    chr VARCHAR2(1000); 
    num NUMBER; 
    dat DATE; 
    rw RAW(4000); 
    res NUMBER; 
BEGIN 
    IF data IS NULL THEN 
    DBMS_OUTPUT.PUT_LINE('NULL value'); 
    RETURN; 
    END IF; 
    tn := data.GETTYPENAME(); 
    IF tn = 'SYS.VARCHAR2' THEN 
    res := data.GETVARCHAR2(str); 
    DBMS_OUTPUT.PUT_LINE(SUBSTR(str,0,253)); 
    ELSIF tn = 'SYS.CHAR' then 
    res := data.GETCHAR(chr); 
    DBMS_OUTPUT.PUT_LINE(SUBSTR(chr,0,253)); 
    ELSIF tn = 'SYS.VARCHAR' THEN 
    res := data.GETVARCHAR(chr); 
    DBMS_OUTPUT.PUT_LINE(chr); 
    ELSIF tn = 'SYS.NUMBER' THEN 
    res := data.GETNUMBER(num); 
    DBMS_OUTPUT.PUT_LINE(num); 
    ELSIF tn = 'SYS.DATE' THEN 
    res := data.GETDATE(dat); 
    DBMS_OUTPUT.PUT_LINE(dat); 
    ELSIF tn = 'SYS.TIMESTAMP' THEN 
    res := data.GETTIMESTAMP(dat); 
    DBMS_OUTPUT.PUT_LINE(tn || ':' || to_char(dat,'DD-MON-YYYY HH24:MI:SS.FF')); 
    ELSIF tn = 'SYS.RAW' THEN 
    -- res := data.GETRAW(rw); 
    -- DBMS_OUTPUT.PUT_LINE(SUBSTR(DBMS_LOB.SUBSTR(rw),0,253)); 
    DBMS_OUTPUT.PUT_LINE(tn || ":RAW"); 
    ELSIF tn = 'SYS.BLOB' THEN 
    DBMS_OUTPUT.PUT_LINE(tn || ":BLOB"); 
    ELSE 
    DBMS_OUTPUT.PUT_LINE('typename is ' || tn); 
    END IF; 
END print_any; 
0

セッションでたprint_any手順が使用開始される:

alter session set nls_date_format='HH24:Mi:SS MM/DD/YY'; 
単にタイムスタンプデータ型の値を出力し、次のバージョンで「たprint_any」ストアドプロシージャを置き換えます
関連する問題