Hi,
I am looking at Oracle schema for IBM's MQ Workflow and I have a table that
has an index on members of a user defined type. This index is not getting
used when it could help a delete statement. Using the 10053 trace I got this
snippet in the trace:

SINGLE TABLE ACCESS PATH
  No statistics type defined for function TIMESTAMP_WF
  No default selectivity defined for function TIMESTAMP_WF

Does anyone have any experience in setting up functions so that the database
will use indexes against them?

In this case the table looks like this:

CREATE TABLE  AUDIT_TRAIL
(
    CREATED             TIMESTAMP_WF        NOT NULL
  , EVENT               NUMBER(10,0)        NOT NULL
  , TEMPL_VALID_FROM    TIMESTAMP_WF
  , ACTIVITY_TYPE       NUMBER(10,0)
  , ACTIVITY_STATE      NUMBER(10,0)
  , ACTIVITY_RC         NUMBER(10,0)
  , CONTAINER_CONTENT   BLOB
  , PROCESS_NAME        VARCHAR2(63)        NOT NULL
  , PROCESS_ID          VARCHAR2(64)        NOT NULL
  , TOP_LVL_PROC_NAME   VARCHAR2(63)        NOT NULL
  , TOP_LVL_PROC_ID     VARCHAR2(64)        NOT NULL
  , PARENT_PROC_NAME    VARCHAR2(63)
  , PARENT_PROC_ID      VARCHAR2(64)
  , PROC_TEMPL_NAME     VARCHAR2(32)        NOT NULL
  , BLOCK_NAMES         VARCHAR2(254)
  , USER_NAME           VARCHAR2(32)
  , SECOND_USER_NAME    VARCHAR2(32)
  , ACTIVITY_NAME       VARCHAR2(32)
  , SECOND_ACT_NAME     VARCHAR2(32)
  , COMMAND_PARAMETERS  VARCHAR2(1024)
  , ASSOCIATED_OBJECT   VARCHAR2(64)
  , OBJECT_DESCRIPTION  VARCHAR2(254)
  , PROGRAM_NAME        VARCHAR2(32)
  , EXTERNAL_CONTEXT    VARCHAR2(254)
)
TABLESPACE ADTTRAIL;

and the index is:

CREATE INDEX AT_CREATED_PROCID
       ON AUDIT_TRAIL
(
CREATED.D, CREATED.S
, PROCESS_ID
) TABLESPACE ADTTRAIL;


and here is the type

CREATE OR REPLACE TYPE TIMESTAMP_WF AS OBJECT(
D DATE,
S NUMBER(6),
STATIC FUNCTION CONSTRUCT( str VARCHAR2 ) RETURN TIMESTAMP_WF,
MEMBER FUNCTION AS_STRING RETURN VARCHAR2,
MEMBER FUNCTION AS_DATE_STRING RETURN VARCHAR2,
MEMBER FUNCTION ADD_SECONDS( sec INTEGER ) RETURN TIMESTAMP_WF,
MEMBER FUNCTION SUB_TIMESTAMP_WF(other_Timestamp IN TIMESTAMP_WF) RETURN
INTEGER
,
ORDER MEMBER FUNCTION COMPARE(other_Timestamp IN TIMESTAMP_WF) RETURN
INTEGER
);
/

CREATE OR REPLACE TYPE BODY TIMESTAMP_WF AS
  STATIC FUNCTION CONSTRUCT( str VARCHAR2 )  RETURN TIMESTAMP_WF IS
  BEGIN
     IF str IS NULL THEN
        RETURN NULL;
     END IF;
     IF LENGTH( str ) >= 26  THEN
        RETURN TIMESTAMP_WF( TO_DATE( SUBSTR( str, 1,19 ),
'yyyy-mm-dd-hh24.mi.s
s' ),
                             TO_NUMBER( SUBSTR( str, 21, 6 ) ));
     END IF;
     IF LENGTH( str ) >= 19  THEN
        RETURN TIMESTAMP_WF( TO_DATE( SUBSTR( str, 1,19 ),
'yyyy-mm-dd-hh24.mi.s
s'), 0 );
     END IF;
     RETURN TIMESTAMP_WF( TO_DATE('ERROR'), 0);
  END;
  MEMBER FUNCTION AS_STRING RETURN VARCHAR2 IS
  BEGIN
    RETURN
TO_CHAR(D,'yyyy-mm-dd-hh24.mi.ss')||'.'||SUBSTR(To_Char(S,'0999999'),
3);
  END;
  MEMBER FUNCTION AS_DATE_STRING RETURN VARCHAR2 IS
  BEGIN
    RETURN TO_CHAR(D,'yyyy-mm-dd-hh24.mi.ss');
  END;
  MEMBER FUNCTION ADD_SECONDS( sec INTEGER ) RETURN TIMESTAMP_WF IS
  BEGIN
     RETURN TIMESTAMP_WF( D + sec/86400, S );
  END;
  MEMBER FUNCTION SUB_TIMESTAMP_WF(other_Timestamp IN TIMESTAMP_WF) RETURN
INTEG
ER IS
  BEGIN
     RETURN ((D - other_TimeStamp.D)*86400);
  END;
  ORDER MEMBER FUNCTION COMPARE(other_Timestamp IN TIMESTAMP_WF) RETURN
INTEGER
IS
  BEGIN
    IF    D > other_Timestamp.D THEN RETURN  1;
    ELSIF D < other_Timestamp.D THEN RETURN -1;
    END IF;
    RETURN S - other_Timestamp.S;
    END;
END;
/

Regards

Pete

__________________________________________________________________

The information contained in this email is confidential and 
intended only for the use of the individual or entity named 
above. If the reader of this message is not the intended 
recipient, you are hereby notified that any dissemination, 
distribution, or copying of this communication is strictly 
prohibited. Thomson Scientific will accept no responsibility 
or liability in respect to this email other than to the addressee. 
If you have received this communication in error, please 
notify us immediately via email: [EMAIL PROTECTED]
__________________________________________________________________
-- 
Please see the official ORACLE-L FAQ: http://www.orafaq.net
-- 
Author: Hitchman, Peter
  INET: [EMAIL PROTECTED]

Fat City Network Services    -- 858-538-5051 http://www.fatcity.com
San Diego, California        -- Mailing list and web hosting services
---------------------------------------------------------------------
To REMOVE yourself from this mailing list, send an E-Mail message
to: [EMAIL PROTECTED] (note EXACT spelling of 'ListGuru') and in
the message BODY, include a line containing: UNSUB ORACLE-L
(or the name of mailing list you want to be removed from).  You may
also send the HELP command for other information (like subscribing).

Reply via email to