scn_to_timestamp ORA-00904

2015-03-18 22:55:38 · 作者: · 浏览: 73

很奇怪,scn_to_timestamp函数的状态通过下面的查询语句来查询
SQL> select owner,object_name,object_type,last_ddl_time,status from dba_objects where object_name='SCN_TO_TIMESTAMP';


OWNER? ? ? ? OBJECT_NAME? ? ? ? ? OBJECT_TYPE? ? ? ? LAST_DDL_TIME STATUS
------------ --------------------- ------------------- ------------- -------
SYS? ? ? ? ? SCN_TO_TIMESTAMP? ? ? FUNCTION? ? ? ? ? ? 2014/11/26 12 VALID
PUBLIC? ? ? SCN_TO_TIMESTAMP? ? ? SYNONYM? ? ? ? ? ? 2014/11/26 12 VALID



后来我把scn_to_timestamp函数的创建语句重新执行一次。
create or replace function scn_to_timestamp(query_scn IN NUMBER)
return TIMESTAMP
IS EXTERNAL
NAME "ktfexscntot"
WITH CONTEXT
PARAMETERS(context,
? ? ? ? ? query_scn OCINUMBER,
? ? ? ? ? RETURN)
LIBRARY DBMS_TRAN_LIB;



在执行完后执行对scn_to_timestamp函数的查询
SQL> select to_char(scn_to_timestamp(3111823),'yyyy-mm-dd hh24:mi:ss') from dual;


TO_CHAR(SCN_TO_TIMESTAMP(31118
------------------------------
2015-02-03 16:26:27



但是却新创建了一个scn_to_timestamp函数并没有替换掉原来的
SQL> select owner,object_name,object_type,last_ddl_time,status from dba_objects where object_name='SCN_TO_TIMESTAMP';


OWNER? ? ? OBJECT_NAME? ? ? ? ? ? ? OBJECT_TYPE? ? ? ? LAST_DDL_TIME STATUS
----------- ------------------------ ------------------- ------------- -------
SYS? ? ? ? SCN_TO_TIMESTAMP? ? ? ? FUNCTION? ? ? ? ? ? 2014/11/26 12 VALID
PUBLIC? ? ? SCN_TO_TIMESTAMP? ? ? ? SYNONYM? ? ? ? ? ? 2014/11/26 12 VALID
SYS? ? ? ? SCN_TO_TIMESTAMP? ? ? ? FUNCTION? ? ? ? ? ? 2015/2/3 16:5 VALID



这个问题还没找到原因,也许是oracle的bug,因为我在oracle 10.2.0.4中重新创建scn_to_timestamp函数后,查询dba_objects并没有显示生成的scn_to_timestamp函数
Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.4.0
Connected as SYS


SQL>
SQL> create or replace function scn_to_timestamp(query_scn IN NUMBER)
? 2? return TIMESTAMP
? 3? IS EXTERNAL
? 4? NAME "ktfexscntot"
? 5? WITH CONTEXT
? 6? PARAMETERS(context,
? 7? ? ? ? ? ? query_scn OCINUMBER,
? 8? ? ? ? ? ? RETURN)
? 9? LIBRARY DBMS_TRAN_LIB;
?10? /


Function created


SQL> select owner,object_name,object_type,last_ddl_time,status from dba_objects where object_name='SCN_TO_TIMESTAMP';


OWNER? ? ? OBJECT_NAME? ? ? ? ? ? ? OBJECT_TYPE? ? ? ? LAST_DDL_TIME STATUS
---------- ------------------------ ------------------- ------------- -------
SYS? ? ? ? SCN_TO_TIMESTAMP? ? ? ? FUNCTION? ? ? ? ? ? 2015/2/3 21:2 VALID
PUBLIC? ? SCN_TO_TIMESTAMP? ? ? ? SYNONYM? ? ? ? ? ? 2008/4/23 12: INVALID


并且在10.2.0.4中重建scn_to_timestamp函数后,对应的同义词失效了,这才是正确而在10.2.0.5中重建scn_to_timestamp函数后,却产生了一个新的同名对象,且对应的同义仍然为有效状态。