Problem in ref cursor output..plz suggest changes

SQL> select * from department;
    DEPTNO ENAME
     7124284 SINGH
SQL> CREATE OR REPLACE PACKAGE l_ref_cursor
  2  AS
  3  TYPE rc IS REF CURSOR;
  4  END;
  5  /
Package created.
SQL> CREATE OR REPLACE PROCEDURE P_RET_REF_CURSOR(in_deptno IN NUMBER,lrc OUT l_ref_cursor.rc)
  2  AS
  3  BEGIN
  4  OPEN lrc FOR 'SELECT * FROM DEPARTMENT WHERE DEPTNO='||in_deptno;
  5  END;
  6  /
Procedure created.
SQL> DECLARE
  2  TYPE DEPT_REF_CURSOR IS REF CURSOR RETURN DEPARTMENT%ROWTYPE;
  3  C1 DEPT_REF_CURSOR;
  4  R_C1 C1%ROWTYPE;
  5  BEGIN
  6  EXECUTE IMMEDIATE 'BEGIN P_RET_REF_CURSOR(:A,:C); END;'
  7  USING IN 7123864,
  8  OUT C1;
  9  LOOP
10  FETCH C1 INTO R_C1;
11  EXIT WHEN C1%NOTFOUND;
12  DBMS_OUTPUT.PUT_LINE(R_C1.ENAME);
13  END LOOP;
14  END;
15  /
DECLARE
ERROR at line 1:
ORA-03113: end-of-file on communication channelCould some one correct me, and also elucidate on what's wrong in my piece of code?
Thanks,
Bhagat

The worse part is that it happens in 9.2.0.5.0 even..
SQL> select * from v$version;
BANNER
Oracle9i Enterprise Edition Release 9.2.0.7.0 - 64bit Production
PL/SQL Release 9.2.0.7.0 - Production
CORE    9.2.0.7.0       Production
TNS for Linux: Version 9.2.0.7.0 - Production
NLSRTL Version 9.2.0.7.0 - Production
SQL> select * from department;
    DEPTNO ENAME
   7124284 SINGH
SQL> CREATE OR REPLACE PACKAGE l_ref_cursor 
  2  AS 
  3   TYPE rc IS REF CURSOR; 
  4  END;
  5  /
Package created.
SQL> CREATE OR REPLACE PROCEDURE P_RET_REF_CURSOR(in_deptno IN NUMBER,lrc OUT l_ref_cursor.rc)  
  2  AS 
  3  BEGIN 
  4   OPEN lrc FOR 'SELECT * FROM DEPARTMENT WHERE DEPTNO= :1' USING in_deptno; 
  5  END; 
  6  /
Procedure created.
SQL> DECLARE 
  2 
  3  TYPE DEPT_REF_CURSOR IS REF CURSOR RETURN DEPARTMENT%ROWTYPE; 
  4 
  5  C1 DEPT_REF_CURSOR; 
  6  R_C1 C1%ROWTYPE; 
  7  BEGIN 
  8 
  9  EXECUTE IMMEDIATE 'BEGIN P_RET_REF_CURSOR(:A,:C); END;'  USING IN 10, OUT C1; 
10 
11  LOOP FETCH C1 INTO R_C1;
12  EXIT WHEN C1%NOTFOUND;
13  DBMS_OUTPUT.PUT_LINE(R_C1.ENAME);
14  END LOOP;
15  END;
16  /
ERROR:
ORA-03114: not connected to ORACLE
DECLARE
ERROR at line 1:
ORA-03113: end-of-file on communication channelAt the same time
SQL> DECLARE
  2   C1 l_ref_cursor.rc;
  3   R_C1 DEPARTMENT%ROWTYPE;
  4  BEGIN
  5    P_RET_REF_CURSOR(7124284,C1);
  6    LOOP
  7     FETCH C1 INTO R_C1;
  8     EXIT WHEN C1%NOTFOUND;
  9     DBMS_OUTPUT.PUT_LINE(R_C1.ENAME);
10    END LOOP;
11  end;
12  /
SINGH
PL/SQL procedure successfully completed.Rgds.

Similar Messages

  • How to call a Stored Procedure with a REF CURSOR output parameter

    I am looking forward an example that call a stored function/procedure with a REF CURSOR output parameter and get the result.
    In other words, I have a stored function/procedure that execute a SELECT statement using the OCI library and then it could get the values of each column and each row.
    I put a code snippet, it have only the main thing to call a simple stored procedure and print the name of each column of the cursor, but I couldn´t to print out the values in the table that call the stored procedure.
    I understand that the next step, it is to call a OCIStmtFetch.
    How to associate the cursor with the OCIStmtFetch?
    If you need more information, only tell me.
    I am using ANSI C with HP-UX Operative System (C for HP-UX) and Oracle 10g.
    Regards.
    Antonio Garcia
    /* callOracleSP */
    #include <stdio.h>
    #include <string.h>
    #include <oci.h>
    #include <stdlib.h>
    char* pConnectChar ="server";
    char* pUsernameChar = "user";
    char* pPasswordChar = "passwd";
    char* sqlCharArray1 = "BEGIN SP_GETCITIES(:s, :c); END;";
    int retval;
    ub4 parmcnt=0;
    ub4 pos2=0;
    text *pcoln[20];
    ub4 namelen[20];
    char state_key[5];
    OCIStmt* pOciStatement;
    OCIStmt* pOciStatCursor;
    OCIError* pOciError;
    OCIEnv* pOciEnviron;
    OCIServer* pOciServer;
    OCISession* pOciSession;
    OCISvcCtx* pOciServiceContext;
    OCIBind* pOciBind[500];
    OCIParam* pOciParam;
    int main()
    retval = OCIEnvCreate(&pOciEnviron, OCI_DEFAULT, NULL, NULL, NULL, NULL,0,NULL);
    retval = OCIEnvInit(&pOciEnviron, OCI_DEFAULT, 0, NULL);
    retval = OCIHandleAlloc(pOciEnviron, (void **)&pOciError, OCI_HTYPE_ERROR, 0, NULL);
    retval = OCIHandleAlloc(pOciEnviron, (void **)&pOciServiceContext, OCI_HTYPE_SVCCTX, 0, NULL);
    retval = OCIHandleAlloc(pOciEnviron, (void **)&pOciStatement, OCI_HTYPE_STMT, 0, NULL);
    retval = OCILogon(pOciEnviron,pOciError,&pOciServiceContext,(unsigned char *)pUsernameChar,
         strlen(pUsernameChar), (unsigned char *)pPasswordChar, strlen(pPasswordChar),
                   (unsigned char *)pConnectChar,strlen(pConnectChar));
    printf("OCILogon retval=%d\n",retval);
    retval = OCIStmtPrepare(pOciStatement, pOciError, (unsigned char *)sqlCharArray1,strlen(sqlCharArray1),
         OCI_NTV_SYNTAX, OCI_DEFAULT);
    printf("StmtPrepare retval=%d\n",retval);
    retval = OCIHandleAlloc(pOciEnviron, (void **)&pOciStatCursor, OCI_HTYPE_STMT, 0, NULL);
    retval = OCIBindByPos(pOciStatement,&pOciBind[0], pOciError, (ub4) 1, (void *)&state_key,
         (sb4) sizeof(state_key), SQLT_STR, (void *) 0, (ub2 *) 0, (ub2 *)0,(ub4)0, (ub4 *)0, (ub4) OCI_DEFAULT);
    printf("BindByPos OCI_HTYPE_STMT retval=%d\n",retval);
    retval = OCIBindByPos(pOciStatement,&pOciBind[1], pOciError, (ub4) 2, (void *)&pOciStatCursor,
         (sb4) 0, SQLT_RSET, (void *) 0, (ub2 *) 0, (ub2 *)0,(ub4)0, (ub4 *)0, (ub4) OCI_DEFAULT);
    printf("BindByPos OCI_HTYPE_STMT retval=%d\n",retval);
    strcpy(state_key,"CA");
    retval = OCIStmtExecute(pOciServiceContext, pOciStatement, pOciError, (ub4)1, (ub4) 0,
         (OCISnapshot *)NULL, (OCISnapshot *)NULL, (ub4) OCI_DEFAULT);
    printf("StmtExecute retval=%d\n",retval);
    /* How to get the values of the cursor? */
    /* Get number of parameters of the Cursor */
    OCIAttrGet((void *) pOciStatCursor, (ub4)OCI_HTYPE_STMT, (void*) &parmcnt,(ub4 *) 0,
         (ub4)OCI_ATTR_PARAM_COUNT, pOciError);
    printf("\nNumber of parameters of the cursor = %d\n",parmcnt);
    for (int pos = 1; pos <= (int)parmcnt; pos++)
         OCIAttrGet((void *) pOciStatCursor, (ub4)OCI_HTYPE_STMT, (void*) &pos2,(ub4 *) 0,
              (ub4)OCI_ATTR_CURRENT_POSITION, pOciError);
         retval = OCIParamGet((void *)pOciStatCursor, (ub4)OCI_HTYPE_STMT, pOciError, (void **)&pOciParam,
              (ub4) pos );
         OCIAttrGet((void*) pOciParam, (ub4) OCI_DTYPE_PARAM,(void*) &pcoln[pos-1],(ub4 *) &namelen[pos-1],
              (ub4) OCI_ATTR_NAME,(OCIError *)pOciError );
    for (int i = 1; i <=(int)parmcnt; i++)
    printf("Column %i\tNAME = %.*s\n",i,namelen[i-1],pcoln[i-1]);
    return 0;
    This is the script that create the table, insert records and create the stored procedure
    CREATE TABLE CITIES (
         STATE_CODE     VARCHAR2(2) NULL,
         CITY_CODE      NUMBER(15,5) NULL,
         CITY_NAME      VARCHAR2(30) NULL
    INSERT INTO CITIES(STATE_CODE, CITY_CODE, CITY_NAME)
    VALUES('CA', 30, 'SAN DIEGO')
    INSERT INTO CITIES(STATE_CODE, CITY_CODE, CITY_NAME)
    VALUES('CA', 40, 'SACRAMENTO')
    INSERT INTO CITIES(STATE_CODE, CITY_CODE, CITY_NAME)
    VALUES('FL', 10, 'MIAMI')
    INSERT INTO CITIES(STATE_CODE, CITY_CODE, CITY_NAME)
    VALUES('FL', 20, 'ORLANDO')
    INSERT INTO CITIES(STATE_CODE, CITY_CODE, CITY_NAME)
    VALUES('NY', 10, 'NEW YORK')
    INSERT INTO CITIES(STATE_CODE, CITY_CODE, CITY_NAME)
    VALUES('NY', 20, 'ALBANY')
    INSERT INTO CITIES(STATE_CODE, CITY_CODE, CITY_NAME)
    VALUES('CA', 10, 'LOS ANGELES')
    INSERT INTO CITIES(STATE_CODE, CITY_CODE, CITY_NAME)
    VALUES('CA', 20, 'SAN FRANCISCO')
    CREATE OR REPLACE PACKAGE globalPkg AUTHID CURRENT_USER AS
    /* The following are T/SQL specific global variables. */
    TYPE RCT1 IS REF CURSOR;/*new weak cursor definition*/
    END globalPkg;
    CREATE OR REPLACE PROCEDURE SP_ADDCITY(
    P_STATE_CODE IN VARCHAR,
    P_CITY_CODE      IN NUMBER,
    P_CITY_NAME      IN VARCHAR2,
    P_RETURN IN OUT NUMBER)
    AS
    StoO_error INTEGER;
    StoO_selcnt INTEGER;
    StoO_rowcnt INTEGER;
    StoO_errmsg VARCHAR2(255);
         BEGIN
    StoO_rowcnt := 0;
    StoO_error := 0;
    StoO_selcnt := 0;
    P_RETURN := 0;
    INSERT INTO CITIES (STATE_CODE, CITY_CODE, CITY_NAME)
    VALUES (P_STATE_CODE, P_CITY_CODE, P_CITY_NAME);
    StoO_rowcnt := SQL%ROWCOUNT;
    EXCEPTION
    WHEN TOO_MANY_ROWS THEN
    StoO_rowcnt := 2;
    WHEN OTHERS THEN
    StoO_rowcnt := 0;
    StoO_selcnt := 0;
    StoO_error := SQLCODE;
    StoO_errmsg := SQLERRM;
              IF StoO_error != 0 THEN
    BEGIN
                   P_RETURN := 1;
         RETURN;
         END;
              END IF;
         END;
    CREATE OR REPLACE PROCEDURE SP_GETCITIES(
    STATE_KEY IN VARCHAR,
    RC1      IN OUT globalPkg.RCT1)
    AS
    StoO_error INTEGER;
    StoO_selcnt INTEGER;
    StoO_rowcnt INTEGER;
    StoO_errmsg VARCHAR2(255);
    BEGIN
    StoO_rowcnt := 0;
    StoO_error := 0;
    StoO_selcnt := 0;
    OPEN RC1 FOR
    SELECT STATE_CODE, CITY_CODE, CITY_NAME
    FROM CITIES
    WHERE STATE_CODE = STATE_KEY
    ORDER BY CITY_CODE;
    StoO_rowcnt := SQL%ROWCOUNT;
    EXCEPTION
    WHEN OTHERS THEN
    StoO_rowcnt := 0;
    StoO_error := SQLCODE;
    StoO_errmsg := SQLERRM;
         END;
    /

    Hi Mark,
    Thanks for your recommendations.
    I change the code with OCIDefineByPos, one for each parameter from cursor and then use the OCIStmtFetch.
    I don´t receive a error when call OCIDefineByPos, but when I call OCIStmtFetch receive a -1 error number.
    What is wrong with the code?
    The script is the same.
    I need your help!
    Best Regards!
    Antonio Garcia (Mexico)
    This the new code:
    #include <stdio.h>
    #include <string.h>
    #include <oci.h>
    #include <stdlib.h>
      char*   pConnectChar ="ORAC617";
      char*   pUsernameChar = "C617_005_DBO_01";
      char*   pPasswordChar = "Tempora1";
      char*   sqlCharArray1 = "BEGIN SP_GETCITIES(:s, :c); END;";
      int     retval;
      ub4 parmcnt=0;
      ub4 pos2=0;
      sb2   *c_indp;
      text *pcoln[20], *name,*name2;
      ub4 namelen[20],len;
      ub2 type,size;
      char state_key[5];
      OCIDefine        *pdef;
      OCIBind          *p_bnd;
      ub1          **c_buf;
      OCIStmt*     pOciStatement;      /* Statement handle */
      OCIStmt*     pOciStatCursor;     /* Statement handle */   
      OCIError*    pOciError;          /* Error handle */
      OCIEnv*      pOciEnviron;        /* Environment handle */
      OCIServer*   pOciServer;         /* Server handle */  
      OCISession*  pOciSession;        /* Session handle */
      OCISvcCtx*   pOciServiceContext; /* Service Context handle */
      OCIBind*     pOciBind[500];      /* Bind handle */
      OCIParam*    pOciParam;          /* Param handle */
      int OCI_Fetch(OCIStmt *p_select,OCIError *p_err, int *piOcc)
      int iOcc, rc; 
      rc=OCIStmtFetch(p_select,p_err,1,OCI_FETCH_NEXT,OCI_DEFAULT);
      printf("rc fetch %i",rc);
      if(rc==0&&piOcc!=NULL){
           printf("entro al if");
        iOcc=*piOcc;
        *piOcc=iOcc+1;
      return rc;
    int main()
    int pos,i=0,rc;
      retval = OCIEnvCreate(&pOciEnviron, OCI_DEFAULT, NULL, NULL, NULL, NULL,0,NULL);
      printf("EnvCreate retval=%d\n", retval);
      retval = OCIEnvInit(&pOciEnviron, OCI_DEFAULT, 0, NULL);
      printf("EnvInit retval=%d\n",retval);
      retval = OCIHandleAlloc(pOciEnviron, (void **)&pOciError, OCI_HTYPE_ERROR, 0, NULL);
      printf("HandleAlloc OCI_HTYPE_ERROR retval=%d\n",retval);
      retval = OCIHandleAlloc(pOciEnviron, (void **)&pOciServiceContext, OCI_HTYPE_SVCCTX, 0, NULL);
      printf("HandleAlloc OCI_HTYPE_SVCCTX retval=%d\n",retval);
      retval = OCIHandleAlloc(pOciEnviron, (void **)&pOciStatement, OCI_HTYPE_STMT, 0, NULL);
      printf("HandleAlloc OCI_HTYPE_STMT retval=%d\n",retval);
      retval = OCILogon(pOciEnviron,pOciError,&pOciServiceContext,(unsigned char *)pUsernameChar,
                  strlen(pUsernameChar), (unsigned char *)pPasswordChar, strlen(pPasswordChar),
                    (unsigned char *)pConnectChar,strlen(pConnectChar));
      printf("OCILogon retval=%d\n",retval);
      retval = OCIStmtPrepare(pOciStatement, pOciError, (unsigned char *)sqlCharArray1,strlen(sqlCharArray1),
                 OCI_NTV_SYNTAX, OCI_DEFAULT);
      printf("StmtPrepare retval=%d\n",retval);
      retval = OCIHandleAlloc(pOciEnviron, (void **)&pOciStatCursor, OCI_HTYPE_STMT, 0, NULL);
      printf("HandleAlloc OCI_HTYPE_STMT retval=%d\n",retval);
      retval = OCIBindByPos(pOciStatement,&pOciBind[0], pOciError, (ub4) 1, (void *)&state_key,
                 (sb4) sizeof(state_key), SQLT_STR, (void *) 0, (ub2 *) 0, (ub2 *)0,(ub4)0, (ub4 *)0, (ub4) OCI_DEFAULT);
      printf("BindByPos OCI_HTYPE_STMT retval=%d\n",retval);
      retval = OCIBindByPos(pOciStatement,&pOciBind[1], pOciError, (ub4) 2, (void *)&pOciStatCursor,
                 (sb4) 0, SQLT_RSET, (void *) 0, (ub2 *) 0, (ub2 *)0,(ub4)0, (ub4 *)0, (ub4) OCI_DEFAULT);
      printf("BindByPos OCI_HTYPE_STMT retval=%d\n",retval);
      strcpy(state_key,"CA");
      retval = OCIStmtExecute(pOciServiceContext, pOciStatement, pOciError, (ub4)1, (ub4) 0,
                   (OCISnapshot *)NULL, (OCISnapshot *)NULL, (ub4) OCI_DEFAULT);
      printf("StmtExecute retval=%d\n",retval);
      c_buf=(ub1 **)calloc(sizeof(ub1 *),3);
      c_indp=(sb2 *)calloc(sizeof(sb2 *),3);
      // Get number of parameters of the Cursor
      OCIAttrGet((void *) pOciStatCursor, (ub4)OCI_HTYPE_STMT, (void*) &parmcnt,(ub4 *) 0,
                  (ub4)OCI_ATTR_PARAM_COUNT, pOciError);
      printf("\nNumber of parameters of the cursor = %d\n",parmcnt);
      for (pos = 1; pos <= (int)parmcnt; pos++)
           OCIAttrGet((void *) pOciStatCursor, (ub4)OCI_HTYPE_STMT, (void*) &pos2,(ub4 *) 0,
                (ub4)OCI_ATTR_CURRENT_POSITION, pOciError);
           retval = OCIParamGet((void *)pOciStatCursor, (ub4)OCI_HTYPE_STMT, pOciError, (void **)&pOciParam,(ub4) pos );
           // Get the column name
           OCIAttrGet((void*) pOciParam, (ub4) OCI_DTYPE_PARAM,(void*) &name,(ub4 *) &len, (ub4) OCI_ATTR_NAME,(OCIError *)pOciError );
            // Get the column datatype
           OCIAttrGet((void*) pOciParam, (ub4) OCI_DTYPE_PARAM,(void*) &type,(ub4 *)0,(ub4)OCI_ATTR_DATA_TYPE,(OCIError *)pOciError);      
            // Get the column size
           OCIAttrGet((void*) pOciParam, (ub4) OCI_DTYPE_PARAM,(void*) &size,(ub4 *)0,(ub4)OCI_ATTR_DATA_SIZE,(OCIError *)pOciError);
           printf("Column %i\tNAME = %.*s \ttype %d \tsize %d\n",pos,len,name,type,size);
           // OCIDefine ByPos, one for each parameter
           // c_buf store the STATE_CODE, CITY_CODE and CITY_NAME columns from the cursor
           rc=OCIDefineByPos(pOciStatCursor,&pdef,(OCIError *)pOciError,pos,c_buf[pos-1],size+1,(ub2)type,(dvoid *)c_indp[pos-1],(ub2 *)0,(ub2 *)0,OCI_DEFAULT);     
          printf("OCIDefineByPos retval=%d\n,rc);
      // call OCIStmtFetch. In the next line, I receive the error
      rc=OCIStmtFetch(pOciStatCursor,pOciError,1,OCI_FETCH_NEXT,OCI_DEFAULT);
      printf("rc fetch %i",rc);
      return 0;
    {code}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               

  • Problem passing REF CURSOR to JAVA STORED PROCEDURE

    Hi,
    I've written a small Java class with a static method and
    imported that into Oracle 8i. The method expects a
    java.sql.ResultSet object as parameter. According to the
    documentation of Oracle, a REF CURSOR (cursor variable) maps to
    java.sql.ResultSet in JDBC.
    The definition of the Java Stored Procedure was accepted without
    problems:
    CREATE OR REPLACE PROCEDURE RESULTSETPASSINGTESTPROC (row
    WASTypes.GenericCurType)
    as language java
    name 'sqlj.ResultSetPassingTest.testResultSetPassing
    (java.sql.ResultSet)';
    WASTypes is a package containing the definition of the generic
    cursor:
    CREATE OR REPLACE PACKAGE WASTYPES
    is
    TYPE GenericCurType IS REF CURSOR;
    END WASTypes;
    In a function I'm opening the cursor via
    'Open cursorVariable for sqlStatement';
    Then this cursor variable is passed to the java method and the
    error ORA-03113 is shown.
    I tried to solve the problem by changing the type of the
    parameter to oracle.sql.REF without success.
    Does anybody know what wents wrong?
    Thanks in advance.
    Jan

    Hi,
    I've written a small Java class with a static method and
    imported that into Oracle 8i. The method expects a
    java.sql.ResultSet object as parameter. According to the
    documentation of Oracle, a REF CURSOR (cursor variable) maps to
    java.sql.ResultSet in JDBC.
    The definition of the Java Stored Procedure was accepted without
    problems:
    CREATE OR REPLACE PROCEDURE RESULTSETPASSINGTESTPROC (row
    WASTypes.GenericCurType)
    as language java
    name 'sqlj.ResultSetPassingTest.testResultSetPassing
    (java.sql.ResultSet)';
    WASTypes is a package containing the definition of the generic
    cursor:
    CREATE OR REPLACE PACKAGE WASTYPES
    is
    TYPE GenericCurType IS REF CURSOR;
    END WASTypes;
    In a function I'm opening the cursor via
    'Open cursorVariable for sqlStatement';
    Then this cursor variable is passed to the java method and the
    error ORA-03113 is shown.
    I tried to solve the problem by changing the type of the
    parameter to oracle.sql.REF without success.
    Does anybody know what wents wrong?
    Thanks in advance.
    Jan

  • Still not possible (4.0 EA3) to copy displayed column headings from ref cursor output.

    Hi,
    I've created an enhancement request to allow displayed column headings from ref_cursor output to be copied.
    This is still not possible (4.0 EA3)
    The ref cursor data can be copied, but not the headings..
    See July 2012 discussion of problem in comments at
    http://www.thatjeffsmith.com/archive/2011/12/sql-developer-tip-viewing-refcursor-output/

    Hi,
    I think you're out of luck... except if you're on 11g where you can use DBMS_SQL.TO_CURSOR_NUMBER to convert the REF CURSOR to a DBMS_SQL cursor, and then benefit from the DBMS_SQL package to get column details.
    http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28419/d_sql.htm#CHDJDGDG

  • Problem using REF CURSOR in JDBC

    i have several stored procedures and functions that return REF CURSOR object as output. however, i'm noticing that if
    no rows are returned within the cursor, the JDBC driver is throwing a "No more data to read from socket" exception.
    i'm using the Oracle Thin JDBC driver v8.1.6 for JDK 1.2.
    any help is appreciated.
    thanks,
    gary
    null

    I am not able to reproduce the problem. Could you post a testcase so that we can follow it up?
    Thanks.

  • Ref Cursor Output

    Hi,
    the I have the following procedure with an ref cursor as an output.
    CONCERN_ID_PK -- CONCERN_ID_FK -- ECN_ID_PK -- ECN_NO
    315 -- 315 -- 87 -- 4711
    i must store the values in variable like
    p_concern_id_pk
    p_concern_id_fk
    p_ecn_id_pk
    p_ecn_no
    because i want to call with the parameter an update procedure or/and an delete procedure.
    The select into statement doesn't work with an ref cursor I read.
    so what can be the solution for the problem ?
    I also have a types packes with the definief ref cursor
    type all_ecns is recursor;
    Must I use an self defined Object type or object table ????
    the procedures follows
    p_concern_id_pk in concern.concern_id_pk%TYPE,
    p_ecn_id_pk in ecn.ecn_id_pk%TYPE,
    p_ecncursor out types.all_ecns
    AS
    BEGIN
    OPEN p_ecncursor for select concern_id_pk, concern_id_fk, ecn_id_pk, ecn_no
    from ecn e,
    concern c
    where e.concern_id_fk = p_concern_id_pk
    and c.concern_id_pk = e.concern_id_fk
    and c.active = 1
    and ecn_id_pk = p_ecn_id_pk
    and c.active = 1;
    END;
    Thanks Marcel

    Is it something like this you're looking for?
    PACKAGE TYPES IS
    type tr is record (col1 tab1.col1%type, col2 tab1.col2%type);
    type tc is ref cursor returning tr;
    END;
    PROCEDURE get_data(p_cursor out types.tc) IS
    BEGIN
    open p_cursor for select col1,col2 from tab1;
    END;
    PROCEDURE process_data(p_cursor in types.tc)
    v_tr types.tr;
    BEGIN
    LOOP
    fetch p_cursor into v_tr;
    exit when p_cursor%notfound;
    dbms_output.put_line(v_tr.col1||' '||v_tr.col2);
    END LOOP;
    close p_cursor;
    END;

  • Iteration problem in ref cursor

    hi all
    declare
    type ref_cur is ref cursor;
    p_ref_cur ref_cur;
    type namelist is table of varchar2(10);
    type address is table of varchar2(20);
    p_namelist namelist;
    p_address address;
    begin
    open p_ref_cur for 'select emp_code,EMP_ADDR from emp_det_bak';
    fetch p_ref_cur bulk collect into p_namelist,p_address;
    for i in p_ref_cur
    loop
    dbms_output.put_line('this is for testing '||p_ref_cur(i));
    end loop;
    end;
    i found error like following--
    ERROR at line 11:
    ORA-06550: line 11, column 10:
    PLS-00221: 'P_REF_CUR' is not a procedure or is undefined
    ORA-06550: line 11, column 1:
    PL/SQL: Statement ignored
    if i use
    for i in p_ref_cur.first..p_ref_cur.last
    i got error message like --
    Invalid reference to variable 'P_REF_CUR'
    can anyone pls tell me what wrong i'm doing and if i want to iterate through will i use
    like--while(p_ref_cur.next) loop
    please suggest me.
    Message was edited by:
    p.bhaskar

    > please suggest me.
    Well, there is a fairly easy way to create a refcursor with the ability to loop through the columns of the cursor - without knowing what the columns are.
    However, this is not always an ideal approach. It uses VARCHAR2 as the data type for all columns and requires the source SQL to to construct a collection.
    Here's a brief example of this approach:
    SQL> create or replace type TColumns as table of varchar2(4000);
    2 /
    Type created.
    SQL>
    SQL> create or replace procedure DisplaySQL( sqlStatement varchar2 ) is
    2 c SYS_REFCURSOR;
    3 colList TColumns;
    4 rowCnt integer := 0;
    5 begin
    6 open c for sqlStatement;
    7
    8 loop
    9 fetch c into colList;
    10 exit when c%NOTFOUND;
    11
    12 rowCnt := rowCnt + 1;
    13
    14 W( '****************' ); -- W = DBMS_OUTPUT.put_line
    15 W( 'row: '||rowCnt );
    16 W( 'columns: '||colList.Count );
    17
    18 for i in 1..colList.Count
    19 loop
    20 W( 'column='||i||' value='||colList(i) );
    21 end loop;
    22 end loop;
    23
    24 W( '****************' );
    25 close c;
    26 end;
    27 /
    Procedure created.
    SQL>
    SQL>
    SQL> var SQL varchar2(4000);
    SQL>
    SQL> exec :SQL := 'select TColumns(created, object_type, object_name) from ALL_OBJECTS where rownum = 1';
    PL/SQL procedure successfully completed.
    SQL> exec DisplaySQL( :SQL )
    row: 1
    columns: 3
    column=1 value=2005/07/21 19:04:20
    column=2 value=TABLE
    column=3 value=CON$
    PL/SQL procedure successfully completed.
    SQL>
    SQL> exec :SQL := 'select TColumns(created, object_type, object_name) from
    ALL_OBJECTS where rownum = 1 UNION ALL select TColumns(dummy,SYSDATE) from
    DUAL';
    PL/SQL procedure successfully completed.
    SQL> exec DisplaySQL( :SQL )
    row: 1
    columns: 3
    column=1 value=2005/07/21 19:04:20
    column=2 value=TABLE
    column=3 value=CON$
    row: 2
    columns: 2
    column=1 value=X
    column=2 value=2007/05/16 13:14:56
    PL/SQL procedure successfully completed.
    SQL>

  • Problem in ref cursor

    Experts,
    Any idea to fix the below error?
    " not all variables bound"
    Below procedure is successfully created, but thrown above error msg while executing.
    When I run the 'stmt1' separately, it runs perfect.
    But as a procedure throwing error.
    create or replace procedure applys(Id varchar2, Seq varchar2, SId varchar2) is
    cursor c1 is select * from meta_applys;
    crec1 c1%rowtype;
    stmt1 varchar2(400);
    stmt2 varchar2(400);
    stmt3 varchar2(400);
    rc1 sys_refcursor;
    gkey number(20);
    ckey varchar2(15);
    begin
         open c1;
         loop
         fetch c1 into crec1;
         exit when c1%notfound;
         stmt1:='select g_key, c_key from '||crec1.t_name||' where Id = :1 and Seq = :2 and '||crec1.dbcname||' not in
         (select '||crec1.vw_colname||' from '||crec1.v_name||' where SId = :3)';
              execute immediate stmt1 into gkey, ckey;
              dbms_output.put_line(gkey||ckey);
         end loop;
         close c1;
         commit;
    end;
    I'm taking 2 values from ref cursor & assigning to 2 variables declared.
    Then why is that error occurring?
    Please assist.

    Experts,
    actually I missed to supply the column names for 'using ' in the below code extract.
    stmt1:='select g_key, c_key from '||crec1.t_name||' where Id = :1 and Seq = :2 and '||crec1.dbcname||' not in
    (select '||crec1.vw_colname||' from '||crec1.v_name||' where SId = :3)';
    execute immediate stmt1 using Id, Seq, SId into gkey, ckey;
    However even after rectifying that(like above), it's not getting executed.
    I'm digging more to fix.

  • Never failing oracle job-plz suggest changes

    Hi,
    I've a procedure which picks every record from a table,creates a string formatting from those records and generates a physical file for each of those records.
    CREATE OR REPLACE PROCEDURE P_JOB
    AS
    CURSOR C_SAVED_REQUESTS
    IS
    SELECT * FROM saved_requests where rownum<2;
    ls_date      VARCHAR2(30);
    ls_file      VARCHAR2(32767);
    ls_file_content VARCHAR2(32767);
    ln_ondemand_rep_seq NUMBER;
    F UTL_FILE.FILE_TYPE;
    rs_error_msg varchar2(2000);
    on_result number;     
    BEGIN
         on_result:=0;
    SELECT to_char(sysdate,'YYYYMMDD') INTO ls_date FROM DUAL;
         FOR lc_saved_requests IN c_saved_requests
         LOOP
              BEGIN
                   SELECT ondemand_rep_seq.NEXTVAL INTO ln_ondemand_rep_seq FROM dual;
                   ls_file:='msg.'||ls_date||'_'||ln_ondemand_rep_seq;
                   ls_file_content:=ls_req_fil_parm1||lc_saved_requests.trans_id||ls_req_fil_parm2||lc_saved_requests.version_id||ls_req_fil_parm3||lc_saved_requests.req_cnt_id||ls_req_fil_parm4||lc_saved_requests.rept_id||ls_req_fil_parm5||lc_saved_requests.class_id||ls_req_fil_parm6||lc_saved_requests.priority||ls_req_fil_parm7||lc_saved_requests.delvry_mec||ls_req_fil_parm8||lc_saved_requests.delvry_addr||ls_req_fil_parm9||lc_saved_requests.delvry_format||ls_req_fil_parm10||lc_saved_requests.user_id||ls_req_fil_parm11||lc_saved_requests.subj;
                   F := UTL_FILE.FOPEN('ATTACH_FILES',ls_file, 'W');               
                   UTL_FILE.PUT_LINE(F,ls_file_content);
                   UTL_FILE.FCLOSE(F);
              EXCEPTION
                   WHEN OTHERS
                   THEN NULL;
              END;
         END LOOP;
    EXCEPTION
    WHEN OTHERS then
         on_result:=-1;
         rs_error_msg := 'P_JOB: ' || SQLERRM;
    END P_JOB;
    And this procedure is invoked once in every 3 minutes using a dbms_job procedure.
    DECLARE
    ln_job_no number;
    BEGIN
    dbms_job.submit(ln_job_no,'P_JOB;',SYSDATE,'SYSDATE+3/86400',NULL);
    dbms_job.run(ln_job_no);
    END;
    Can someone suggests me the changes that needs to be incorporated for making this job a NEVER failing one.(ie.The job should never be marked as "broken".)
    Thanks,
    Bhagat

    You have nothing to add or modify because you catch all
    exceptions that might be raised and you never raise them
    again: from Oracle point of view your job will never fail.
    But it would be nicer if your code could log your errors in
    a table or in a file otherwise it may be quite difficult
    to know hat your job has encountered an error.
    Message was edited by:
    Pierre Forstmann

  • Unit Test Validation for Output Ref Cursor Not Working

    Here is the problem:
    I have a stored procedure as follows:
    CREATE OR REPLACE
    PROCEDURE usp_GetEmployee(
    p_employeeId IN NUMBER,
    cv_employee OUT Sys_RefCursor )
    AS
    BEGIN
    OPEN cv_employee FOR SELECT * FROM employees WHERE employee_id=p_employeeid;
    END usp_GetEmployee;
    For this, I am implementing a unit test.
    * In the "Select Parameters" step, I am unchecking the "Test Result" check box for the cursor OUT variable.
    * In the "Specify Validations" step, I am choosing "Boolean Function" and putting the following PL/SQL code:
    DECLARE
    emp_rec {cv_employee$}%rowtype;
    BEGIN
    FETCH {cv_employee$} INTO emp_rec;
    IF {cv_employee$}%FOUND THEN
    RETURN TRUE;
    ELSE
    RETURN FALSE;
    END IF;
    RETURN TRUE;
    END;
    But, when I try to execute this Test, I get the following error:
    Validation Boolean function failed: Unable to convert <oracle.jdbc.driver.OracleResultSetImpl@4f0617> to REF CURSOR.
    If I run in the debug mode, I get the following content in a dialog box:
    The following procedure was run.
    Execution Call
    BEGIN
    "ARCADMIN"."USP_GETEMPLOYEE"(P_EMPLOYEEID=>:1,
    CV_EMPLOYEE=>:2);
    END;
    Bind variables used
    :1 NUMBER IN 1001
    :2 REF CURSOR OUT (null)
    Execution Results
    ERROR
    CV_EMPLOYEE : Expected: [Any value because apply check was cleared], Received: [EMPLOYEE_ID                             COMMISSION_PCT                          SALARY                                 
    1001                                    0.2                                     8400                                   
    Validation Boolean function failed: Unable to convert <oracle.jdbc.driver.OracleResultSetImpl@31dba0> to REF CURSOR.
    Please suggest how to handle this issue.
    Thanks,
    Rahul

    979635 wrote:
    But, when I try to execute this Test, I get the following error:
    Validation Boolean function failed: Unable to convert <oracle.jdbc.driver.OracleResultSetImpl@4f0617> to REF CURSOR.
    If I run in the debug mode, I get the following content in a dialog box:
    The following procedure was run.
    Execution Call
    BEGIN
    "ARCADMIN"."USP_GETEMPLOYEE"(P_EMPLOYEEID=>:1,
    CV_EMPLOYEE=>:2);
    END;
    Bind variables used
    :1 NUMBER IN 1001
    :2 REF CURSOR OUT (null)
    Try explicity declaring the ref cursor instead of using a bind variable, something like (untested)
    begin
      foo sys_refcurosr;
    begin
      test_procedure(foo);
    end;Alternately, in SQL*PLUS use the DEFINE command to ste a named bind variable to type REFCURSOR and use the named bind variable in your test
    Edited by: riedelme on Jan 23, 2013 7:10 AM

  • Got my REF CURSOR, how to output?

    I started with this code:
    Re: find first record in the tree
    and get the dbms_output I'm looking for. What I don't understand is how to get the output into the refcursor OUT. I've read about FETCH INTO variables, but how does that get to the REF?
    There is an Oracle Form calling this procedure, if that makes any difference.

    Here an example of an stored procedure with REF CURSOR output
    CREATE OR REPLACE PROCEDURE Test_Proc
    (pIPI_EmpId IN PLS_INTEGER,
    pORC_RefCur OUT SYS_REFCURSOR)
    IS
    BEGIN
    OPEN pORC_RefCur FOR
    SELECT Employee_Name
    FROM Employee
    WHERE Employee_Id = pIPI_EmpId;
    END Test_Proc;
    Calling the procedure from Oracle Form
    DECLARE
    vRC_RefCur SYS_REFCURSOR;
    vT_Employee Employee.Employee_Name%TYPE;
    BEGIN
    Test_Proc(Form.Block.Employee_Id, vRC_RefCur);
    LOOP
    FETCH vRC_RefCur INTO vT_Employee;
    EXIT WHEN vRC_RefCur%NOTFOUND;
    Form.Block.Employee_Name := vT_Employee;
    END LOOP;
    END;

  • Select query on REF CURSOR

    Hi all,
    I am trying see if we can use LINQ like functionality to query a ref cursor resultset. I have about 50 procedures( as part of 12 packages) which send the ref cursor output to a front end application when called individually. Now I need to create a procedure to get only specified records from each of these 50 ref cursors and output it to another ref curosr.
    In other words how can I use the following
    select col_2 from pkg_abc.pro_ref_cursor_out(arg1, arg2...) where col_1 = 'X':I am not inclined to use a fetch as I foresee performance issues?
    Thanks

    @ Tubby. Here is what I am looking to do. Let us say I have two packages as below each with one ref cursor. In reality there are about 15 packages and 50 procedures and hence 50 ref cursors.
    CREATE OR REPLACE PACKAGE pkg_1
    IS
       TYPE resultset_typ IS REF CURSOR;
       PROCEDURE pro_1 (
          i_region          IN       VARCHAR2,
          o_resultset      OUT      resultset_typ,          -- 'recordset' output
    END pkg_1;
    CREATE OR REPLACE PACKAGE BODY pkg_1
    IS
       PROCEDURE pro_1 (
          i_region          IN       VARCHAR2,
          o_resultset      OUT      resultset_typ,         
       IS
        BEGIN
           OPEN o_resultset FOR
                 SELECT 'employees' AS person_type, employee_name FROM tbl_employees WHERE region = i_region;   
        END;
       END pro_1;
    END pkg_1;
    CREATE OR REPLACE PACKAGE pkg_2
    IS
       TYPE resultset_typ IS REF CURSOR;
       PROCEDURE pro_2 (
          i_region          IN       VARCHAR2,
          o_resultset      OUT      resultset_typ,          -- 'recordset' output
    END pkg_2;
    CREATE OR REPLACE PACKAGE BODY pkg_2
    IS
       PROCEDURE pro_2 (
          i_region          IN       VARCHAR2,
          o_resultset      OUT      resultset_typ,         
       IS
        BEGIN
           OPEN o_resultset FOR
                 SELECT 'customers' AS person_type, customer_name FROM tbl_customers WHERE region = i_region;
        END;
       END pro_2;
    END pkg_2;Currenlty the front end app calls these packages individually when required. But I want to create an additional package as follows so that I dont have to write the underlying queries again.
    CREATE OR REPLACE PACKAGE pkg_3
    IS
       TYPE resultset_typ IS REF CURSOR;
       PROCEDURE pro_3 (
          i_region          IN       VARCHAR2,
          i_name           IN       VARCHAR2,
          o_resultset      OUT      resultset_typ,          -- 'recordset' output
    END pkg_3;
    CREATE OR REPLACE PACKAGE BODY pkg_3
    IS
       PROCEDURE pro_3 (
          i_region          IN       VARCHAR2,
          i_name           IN       VARCHAR2,
          o_resultset     OUT      resultset_typ,         
       IS
        BEGIN
           OPEN o_resultset FOR
                 SELECT * FROM pkg_1.pro_1(i_region) WHERE employee_name = i_name
                 UNION ALL
                 SELECT * FROM pkg_2.pro_2(i_region) WHERE customer_name = i_name
        END;
       END pro_3;
    END pkg_3;

  • Want to manipulate the ref cursor

    Hi,
    iam having a procedure whiuch returns a ref cursor as a output parameter having 20 columns.
    i had to manipulate only 2 columns in that ref cursor output in another calling procedure.
    iam getting an error when iam fetching the ref cursor result into only 2 variables.
    How can i achieve this ?

    Why?
    Let's see it ->
    satyaki>
    satyaki>select * from v$version;
    BANNER
    Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Prod
    PL/SQL Release 10.2.0.3.0 - Production
    CORE    10.2.0.3.0      Production
    TNS for 32-bit Windows: Version 10.2.0.3.0 - Production
    NLSRTL Version 10.2.0.3.0 - Production
    Elapsed: 00:00:00.18
    satyaki>
    satyaki>create or replace procedure r_gen_arg(
      2                                         choice in number,
      3                                         b in out sys_refcursor
      4                                       )
      5  is  
      6    str   varchar2(500);
      7  begin   
      8    if choice = 1 then      
      9        str := 'select * from emp';   
    10    elsif choice = 2 then      
    11      str := 'select * from dept';   
    12    end if;       
    13   
    14    open b for str;
    15  exception  
    16    when others then     
    17      dbms_output.put_line(sqlerrm);
    18  end;
    19  /
    Procedure created.
    Elapsed: 00:00:04.51
    satyaki>
    satyaki>
    satyaki>declare   
      2    rec_x emp%rowtype;   
      3    rec_y dept%rowtype;       
      4    w sys_refcursor;
      5  begin  
      6    dbms_output.enable(1000000);  
      7    r_gen_arg(1,w);  
      8    loop    
      9      fetch w into rec_x;     
    10        exit when w%notfound;             
    11        dbms_output.put_line('Employee No: '||rec_x.empno||' - '||                          
    12                             'Name: '||rec_x.ename||' - '||                          
    13                             'Job: '||rec_x.job||' - '||                          
    14                             'Manager: '||rec_x.mgr||' - '||                          
    15                             'Joining Date: '||rec_x.hiredate||' - '||                          
    16                             'Salary: '||rec_x.sal||' - '||                          
    17                             'Commission: '||rec_x.comm||' - '||                          
    18                             'Department No: '||rec_x.deptno);  
    19     end loop;  
    20     close w;    
    21    
    22     r_gen_arg(2,w);  
    23     loop    
    24       fetch w into rec_y;
    25        exit when w%notfound;            
    26        dbms_output.put_line('Department No: '||rec_y.deptno||' - '||                           
    27                             'Name: '||rec_y.dname||' - '||                           
    28                             'Location: '||rec_y.loc);  
    29     end loop;  
    30     close w;
    31  exception  
    32    when others then    
    33       dbms_output.put_line(sqlerrm);
    34  end;
    35  /
    Employee No: 9999 - Name: SATYAKI - Job: SLS - Manager: 7698 - Joining Date: 02-NOV-08 - Salary: 55000 - Commission: 3455 - Department No: 10
    Employee No: 7777 - Name: SOURAV - Job: SLS - Manager:  - Joining Date: 14-SEP-08 - Salary: 45000 - Commission: 3400 - Department No: 10
    Employee No: 7521 - Name: WARD - Job: SALESMAN - Manager: 7698 - Joining Date: 22-FEB-81 - Salary: 1250 - Commission: 500 - Department No: 30
    Employee No: 7566 - Name: JONES - Job: MANAGER - Manager: 7839 - Joining Date: 02-APR-81 - Salary: 2975 - Commission:  - Department No: 20
    Employee No: 7654 - Name: MARTIN - Job: SALESMAN - Manager: 7698 - Joining Date: 28-SEP-81 - Salary: 1250 - Commission: 1400 - Department No: 30
    Employee No: 7698 - Name: BLAKE - Job: MANAGER - Manager: 7839 - Joining Date: 01-MAY-81 - Salary: 2850 - Commission:  - Department No: 30
    Employee No: 7782 - Name: CLARK - Job: MANAGER - Manager: 7839 - Joining Date: 09-JUN-81 - Salary: 4450 - Commission:  - Department No: 10
    Employee No: 7788 - Name: SCOTT - Job: ANALYST - Manager: 7566 - Joining Date: 19-APR-87 - Salary: 3000 - Commission:  - Department No: 20
    Employee No: 7839 - Name: KING - Job: PRESIDENT - Manager:  - Joining Date: 17-NOV-81 - Salary: 7000 - Commission:  - Department No: 10
    Employee No: 7844 - Name: TURNER - Job: SALESMAN - Manager: 7698 - Joining Date: 08-SEP-81 - Salary: 1500 - Commission: 0 - Department No: 30
    Employee No: 7876 - Name: ADAMS - Job: CLERK - Manager: 7788 - Joining Date: 23-MAY-87 - Salary: 1100 - Commission:  - Department No: 20
    Employee No: 7900 - Name: JAMES - Job: CLERK - Manager: 7698 - Joining Date: 03-DEC-81 - Salary: 950 - Commission:  - Department No: 30
    Employee No: 7902 - Name: FORD - Job: ANALYST - Manager: 7566 - Joining Date: 03-DEC-81 - Salary: 3000 - Commission:  - Department No: 20
    Department No: 10 - Name: ACCOUNTING - Location: NEW YORK
    Department No: 20 - Name: RESEARCH - Location: DALLAS
    Department No: 30 - Name: SALES - Location: CHICAGO
    Department No: 40 - Name: LOGISTICS - Location: CHICAGO
    PL/SQL procedure successfully completed.
    Elapsed: 00:00:00.85
    satyaki>
    satyaki>Here, i don't have to use separate variable to hold those required value.
    Regards.
    Satyaki De.

  • Dynamic REF Cursor with Dynamic Fetch - Urgent

    i have a pl/sql package with generates dynamic SQL statments. my problem is i want to open this SQL statment dynamically and fetch data in dynamic variable.
    declare
    type type_temp is REF CURSOR;
    cur_temp type_temp;
    mv_sql varchar2(4000);
    begin
    -- this will be dunamically generated and
    -- hence could have any no. of columns.
    mv_sql := select f1, f2, f3, f4 from table_temp;
    open cur_temp for mv_sql;
    fetch cur_temp into c1, c2, c3, c4;
    close cur_temp;
    end;
    problem is my sql statment will have N no. of columns how can i fetch this N no. of columns.

    Very hard problem, because ref cursors do not (directly) support description!
    Se mine (non-ideal) solution (it may be doable, but it isn't very practical
    or easily maintainable):
    1. "Generic" package
    CREATE OR REPLACE PACKAGE dyn_fetch IS
    TYPE ref_cur_t IS REF CURSOR;
    g_query VARCHAR2 (32000);
    g_count NUMBER;
    g_desc_tab DBMS_SQL.DESC_TAB;
    varchar2_type CONSTANT PLS_INTEGER := 1;
    number_type CONSTANT PLS_INTEGER := 2;
    date_type CONSTANT PLS_INTEGER := 12;
    rowid_type CONSTANT PLS_INTEGER := 11;
    char_type CONSTANT PLS_INTEGER := 96;
    long_type CONSTANT PLS_INTEGER := 8;
    raw_type CONSTANT PLS_INTEGER := 23;
    mlslabel_type CONSTANT PLS_INTEGER := 106;
    clob_type CONSTANT PLS_INTEGER := 112;
    blob_type CONSTANT PLS_INTEGER := 113;
    bfile_type CONSTANT PLS_INTEGER := 114;
    PROCEDURE describe_columns;
    FUNCTION record_def RETURN VARCHAR2;
    END;
    CREATE OR REPLACE PACKAGE BODY dyn_fetch IS
    PROCEDURE describe_columns IS
    l_cur INTEGER;
    BEGIN
    l_cur := DBMS_SQL.OPEN_CURSOR;
    DBMS_SQL.PARSE (l_cur, g_query, DBMS_SQL.NATIVE);
    DBMS_SQL.DESCRIBE_COLUMNS (l_cur, g_count, g_desc_tab);
    DBMS_SQL.CLOSE_CURSOR (l_cur);
    EXCEPTION
    WHEN OTHERS THEN
    IF DBMS_SQL.IS_OPEN (l_cur) THEN
    DBMS_SQL.CLOSE_CURSOR (l_cur);
    END IF;
    RAISE;
    END;
    FUNCTION record_def RETURN VARCHAR2 IS
    l_record_def VARCHAR2 (32000);
    l_type VARCHAR2 (100);
    l_col_type PLS_INTEGER;
    l_col_max_len PLS_INTEGER;
    l_col_precision PLS_INTEGER;
    l_col_scale PLS_INTEGER;
    BEGIN
    FOR i IN 1..g_count LOOP
    l_col_type := g_desc_tab(i).col_type;
    l_col_max_len := g_desc_tab(i).col_max_len;
    l_col_precision := g_desc_tab(i).col_precision;
    l_col_scale := g_desc_tab(i).col_scale;
    IF l_col_type = varchar2_type THEN
    l_type := 'VARCHAR2(' || l_col_max_len || ')';
    ELSIF l_col_type = number_type THEN
    l_type := 'NUMBER(' || l_col_precision || ',' || l_col_scale || ')';
    ELSIF l_col_type = date_type THEN
    l_type := 'DATE';
    ELSIF l_col_type = rowid_type THEN
    l_type := 'ROWID';
    ELSIF l_col_type = char_type THEN
    l_type := 'CHAR(' || l_col_max_len || ')';
    -- ELSIF l_col_type = ...
    -- long_type, raw_type ...
    END IF;
    l_record_def := l_record_def || ' col_' || i || ' ' || l_type || ',';
    END LOOP;
    l_record_def := RTRIM (l_record_def, ',');
    RETURN l_record_def;
    END;
    END;
    Note that procedure "record_def" creates columns names as col_1 (col_2 ...)
    because SELECT clause in your query can be without aliases, for example
    "SELECT deptno || dname FROM dept".
    2. Your package which returns query nad ref cursor
    CREATE OR REPLACE PACKAGE test IS
    PROCEDURE set_query (p_query VARCHAR2 := NULL);
    FUNCTION ref_cur RETURN dyn_fetch.ref_cur_t;
    END;
    CREATE OR REPLACE PACKAGE BODY test IS
    PROCEDURE set_query (p_query VARCHAR2 := NULL) IS
    l_query VARCHAR2 (32000) :=
    ' SELECT e.empno, e.ename,' ||
    ' e.deptno, d.dname' ||
    ' FROM emp e,' ||
    ' dept d' ||
    ' WHERE e.deptno = d.deptno';
    BEGIN
    IF p_query IS NULL THEN
    dyn_fetch.g_query := l_query;
    ELSE
    dyn_fetch.g_query := p_query;
    END IF;
    END;
    FUNCTION ref_cur RETURN dyn_fetch.ref_cur_t IS
    l_ref_cur dyn_fetch.ref_cur_t;
    BEGIN
    OPEN l_ref_cur FOR dyn_fetch.g_query;
    RETURN l_ref_cur;
    END;
    END;
    Why we need two separate procedures (functions) in your package ?
    a) Receiving program must use dynamic SQL, but in dynamic block we can access
    only PL/SQL code elements that have global scope (standalone functions and procedures,
    and elements defined in the specification of a package).
    Unfortunately, cursor variables cannot be defined in the specification of a package
    (cannot be global variables).
    b) Receiving program must get the column list before ref cursor.
    So, we have two options: call (in receiving program) the same function two times
    (once to get the column list and once to return a ref cursor)
    or use one procedure (or function) for returning query (to get the column list)
    and second function for returning a ref cursor.
    3. Your receiving program
    CREATE OR REPLACE PROCEDURE test_fetch_ref_cur (p_query VARCHAR2 := NULL) IS
    l_statement VARCHAR2 (32000);
    FUNCTION process_def RETURN VARCHAR2 IS
    l_process_def VARCHAR2 (32000);
    BEGIN
    l_process_def := 'DBMS_OUTPUT.PUT_LINE (';
    FOR i IN 1 .. dyn_fetch.g_count LOOP
    l_process_def := l_process_def || ' l_record.col_' || i || ' || ''>>'' || ';
    END LOOP;
    l_process_def := RTRIM (l_process_def, ' || ''>>'' || ') || ');';
    RETURN l_process_def;
    END;
    BEGIN
    test.set_query (p_query);
    dyn_fetch.describe_columns;
    l_statement :=
    ' DECLARE' ||
    ' TYPE record_t IS RECORD (' ||
    dyn_fetch.record_def || ');' ||
    ' l_record record_t;' ||
    ' l_ref_cur dyn_fetch.ref_cur_t;' ||
    ' BEGIN' ||
    ' l_ref_cur := test.ref_cur;' ||
    ' LOOP' ||
    ' FETCH l_ref_cur INTO l_record;' ||
    ' EXIT WHEN l_ref_cur%NOTFOUND;' ||
    process_def ||
    ' END LOOP;' ||
    ' CLOSE l_ref_cur;' ||
    ' END;';
    EXECUTE IMMEDIATE l_statement;
    END;
    You can test this with:
    SET SERVEROUTPUT ON;
    EXECUTE test_fetch_ref_cur;
    Note that we can try to use more generic solution:
    CREATE OR REPLACE PACKAGE dyn_fetch IS
    -- SAME AS BEFORE, PLUS:
    PROCEDURE fetch_ref_cur (
    p_function_ref_cur VARCHAR2,
    p_process_def VARCHAR2);
    END;
    CREATE OR REPLACE PACKAGE BODY dyn_fetch IS
    -- SAME AS BEFORE, PLUS:
    PROCEDURE fetch_ref_cur (
    p_function_ref_cur VARCHAR2,
    p_process_def VARCHAR2)
    IS
    l_statement VARCHAR2 (32000);
    BEGIN
    l_statement :=
    ' DECLARE' ||
    ' TYPE record_t IS RECORD (' ||
    record_def || ');' ||
    ' l_record record_t;' ||
    ' l_ref_cur dyn_fetch.ref_cur_t;' ||
    ' BEGIN' ||
    ' l_ref_cur := ' ||
    p_function_ref_cur || ';' ||
    ' LOOP' ||
    ' FETCH l_ref_cur INTO l_record;' ||
    ' EXIT WHEN l_ref_cur%NOTFOUND;' ||
    p_process_def ||
    ' END LOOP;' ||
    ' CLOSE l_ref_cur;' ||
    ' END;';
    EXECUTE IMMEDIATE l_statement;
    END;
    END;
    CREATE OR REPLACE PROCEDURE test_fetch_ref_cur (p_query VARCHAR2 := NULL) IS
    FUNCTION process_def RETURN VARCHAR2 IS
    -- SAME AS BEFORE
    END;
    BEGIN
    test.set_query (p_query);
    dyn_fetch.describe_columns;
    dyn_fetch.fetch_ref_cur (
    p_function_ref_cur => 'test.ref_cur',
    p_process_def => process_def);
    END;
    Regards,
    Zlatko Sirotic

  • Ref cursor is slower than issuing the same query directly

    We are building SQL dynamically in PL/SQL procedure. SQL is complex enough (pivoting, UNIONS, spatial operations, complex underlying view joining many tables). Then we are opening ref cursor output parameter using the following syntax:
    OPEN p_cursor FOR v_sql using p_param1, p_param2;
    Then client code iterates through the rows of the cursor. It takes about a minute. If we run the SQL stored in v_sql variable directly in SQL Plus (replacing bind variables with values of course), we get 4 seconds response time.
    QUESTION: what makes ref cursor being so slow comparing with direct execution of the same query?

    OK, here are the traces. Execution plans look different. I have called SP (which opens ref cursor) first, then applied tkprof on trace file, copied SQL from that file into SQL Plus (before that I have defined bind variables in SQL Plus) and executed it, so I'm 100% sure that in SQL Plus I'm running exactly the same query SP issues for ref cursor.
    1. PL/SQL - ref cursor:
    TKPROF: Release 10.2.0.1.0 - Production on Wed May 16 10:59:30 2007
    Copyright (c) 1982, 2005, Oracle. All rights reserved.
    Trace file: D:\oracle\product\10.2.0\admin\dae\udump\dae_ora_17004_refcursor.trc
    Sort options: default
    count = number of times OCI procedure was executed
    cpu = cpu time in seconds executing
    elapsed = elapsed time in seconds executing
    disk = number of physical reads of buffers from disk
    query = number of buffers gotten for consistent read
    current = number of buffers gotten in current mode (usually for update)
    rows = number of rows processed by the fetch or execute call
    BEGIN DBMS_OUTPUT.GET_LINES(:LINES, :NUMLINES); END;
    call count cpu elapsed disk query current rows
    Parse 2 0.00 0.00 0 0 0 0
    Execute 569 0.12 0.09 0 1707 0 569
    Fetch 0 0.00 0.00 0 0 0 0
    total 571 0.12 0.09 0 1707 0 569
    Misses in library cache during parse: 0
    Optimizer mode: ALL_ROWS
    Parsing user id: 75
    declare
    TYPE OutRefCursor IS REF CURSOR;
    TYPE RightClickRec IS RECORD(category_ varchar2(50), subcategory varchar2(50), param_name varchar2(50), param_value varchar2(50));
    rc OutRefCursor;
    rec RightClickRec;
    errno number;
    errmsg varchar2(200);
    begin
    cust_pck_layer.get_right_click_channel_info('7WAN097B_B','TCH',rc, errno, errmsg);
    loop
    fetch rc into rec;
    exit when rc%notfound;
    dbms_output.put_line(rec.category_ || ' ' || rec.subcategory || ' ' || rec.param_name || ' ' || rec.param_value);
    end loop;
    end;
    call count cpu elapsed disk query current rows
    Parse 1 0.00 0.00 0 0 0 0
    Execute 1 0.15 0.15 0 0 0 1
    Fetch 0 0.00 0.00 0 0 0 0
    total 2 0.15 0.15 0 0 0 1
    Misses in library cache during parse: 0
    Optimizer mode: ALL_ROWS
    Parsing user id: 75
    select Category, Sub_Category, Param_Name, Param_Value
    from
    ( ( select distinct 0 as order_c,'TCH Analysis' as Category, NULL as
    Sub_Category,0 as Param_Id, 'Analyzed Sector' as Param_Name, :p_sectorid_1
    as Param_Value, 0 as SORTORDER, 0 as DISTANCE from dual)
    UNION select
    order_c,Category,Sub_Category,Param_Id,Param_Name,stragg(Param_Value) as
    Param_Value,1 as SORTORDER, 0 as DISTANCE from ( select distinct 1 as
    order_c,'TCH Analysis' as Category, NULL as Sub_Category,0 as Param_Id,
    'TCH' as Param_Name, to_char(CHANNEL) as Param_Value, 1 as SORTORDER, 0 as
    DISTANCE from sector_freq_params where SECTOR_ID=:p_SectorId_2 and
    CHAN_TYPE_ID = 2) group by order_c,Category,Sub_Category,Param_Id,
    Param_Name,SORTORDER
    UNION (select r.rr + 1 order_c, 'TCH Analysis' as
    Category, to_char(Sub_Category) as Sub_Category,
    decode(r.rr, 1, 1, 2, 3, 3,
    3, 4, 4, 5, 4) Param_Id,
    decode(r.rr, 1, 'Sector Name', 2, 'Channel
    Number', 3, 'BSIC', 4, 'Relationship', 5, 'Distance to Sector (mi)')
    Param_Name,
    decode(r.rr, 1, SECTOR_ID, 2, Channel_Number, 3, BSIC, 4,
    Relationship, 5, Distance) Param_Value, SORTORDER, DISTANCE from
    (select
    rownum Sub_Category, SECTOR_ID, SORTORDER, Channel_Number, BSIC,
    Relationship, DISTANCE
    from dae_admin.TCH_ANALYSIS_VIEW where
    SELECTED_SECTOR_ID = :p_sectorid_3 and
    SDO_WITHIN_DISTANCE(GEOLOC,
    SELECTED_GEOLOC, 'unit=MILE,distance=25')='TRUE') qry,
    (select 1 rr from
    dual union select 2 from dual union select 3 from dual union select 4 from
    dual union select 5 from dual) r)) order by SORTORDER, DISTANCE, order_c
    asc
    call count cpu elapsed disk query current rows
    Parse 1 0.00 0.00 0 0 0 0
    Execute 1 0.00 0.00 0 0 0 0
    Fetch 8513 31.56 33.05 0 1006398 0 8512
    total 8515 31.56 33.05 0 1006398 0 8512
    Misses in library cache during parse: 0
    Optimizer mode: ALL_ROWS
    Parsing user id: 75 (recursive depth: 1)
    Rows Row Source Operation
    8512 SORT ORDER BY (cr=1972854 pr=0 pw=0 time=62811214 us)
    8512 VIEW (cr=1972854 pr=0 pw=0 time=62806007 us)
    8512 SORT UNIQUE (cr=1972854 pr=0 pw=0 time=62797492 us)
    8512 UNION-ALL (cr=1972854 pr=0 pw=0 time=2119247 us)
    1 FAST DUAL (cr=0 pr=0 pw=0 time=1 us)
    1 SORT GROUP BY (cr=2457 pr=0 pw=0 time=16606 us)
    3 VIEW (cr=2457 pr=0 pw=0 time=16040 us)
    3 HASH UNIQUE (cr=2457 pr=0 pw=0 time=16036 us)
    3 PARTITION RANGE ALL PARTITION: 1 2 (cr=2457 pr=0 pw=0 time=3999 us)
    3 TABLE ACCESS FULL SECTOR_FREQ_PARAMS PARTITION: 1 2 (cr=2457 pr=0 pw=0 time=3996 us)
    8510 MERGE JOIN CARTESIAN (cr=1970397 pr=0 pw=0 time=62768739 us)
    5 VIEW (cr=0 pr=0 pw=0 time=54 us)
    5 SORT UNIQUE (cr=0 pr=0 pw=0 time=49 us)
    5 UNION-ALL (cr=0 pr=0 pw=0 time=21 us)
    1 FAST DUAL (cr=0 pr=0 pw=0 time=2 us)
    1 FAST DUAL (cr=0 pr=0 pw=0 time=0 us)
    1 FAST DUAL (cr=0 pr=0 pw=0 time=2 us)
    1 FAST DUAL (cr=0 pr=0 pw=0 time=1 us)
    1 FAST DUAL (cr=0 pr=0 pw=0 time=2 us)
    8510 BUFFER SORT (cr=1970397 pr=0 pw=0 time=62760191 us)
    1702 VIEW (cr=1970397 pr=0 pw=0 time=20797110 us)
    1702 COUNT (cr=1970397 pr=0 pw=0 time=20793704 us)
    1702 VIEW TCH_ANALYSIS_VIEW (cr=1970397 pr=0 pw=0 time=20792001 us)
    15588 HASH JOIN (cr=10465 pr=0 pw=0 time=2560803 us)
    15609 MERGE JOIN (cr=4918 pr=0 pw=0 time=1430639 us)
    478112 MERGE JOIN CARTESIAN (cr=2461 pr=0 pw=0 time=659598 us)
    1 PARTITION RANGE ALL PARTITION: 1 2 (cr=4 pr=0 pw=0 time=79 us)
    1 TABLE ACCESS BY LOCAL INDEX ROWID SECTORS PARTITION: 1 2 (cr=4 pr=0 pw=0 time=68 us)
    1 INDEX RANGE SCAN SECTORS_SECTORID_IND PARTITION: 1 2 (cr=3 pr=0 pw=0 time=25 us)(object id 1834180)
    478112 BUFFER SORT (cr=2457 pr=0 pw=0 time=181427 us)
    478112 PARTITION RANGE ALL PARTITION: 1 2 (cr=2457 pr=0 pw=0 time=478158 us)
    478112 TABLE ACCESS FULL SECTOR_FREQ_PARAMS PARTITION: 1 2 (cr=2457 pr=0 pw=0 time=45 us)
    15609 FILTER (cr=2457 pr=0 pw=0 time=1859879 us)
    1434336 SORT JOIN (cr=2457 pr=0 pw=0 time=513880 us)
    3 PARTITION RANGE ALL PARTITION: 1 2 (cr=2457 pr=0 pw=0 time=3966 us)
    3 TABLE ACCESS FULL SECTOR_FREQ_PARAMS PARTITION: 1 2 (cr=2457 pr=0 pw=0 time=3958 us)
    115509 PARTITION RANGE ALL PARTITION: 1 2 (cr=5547 pr=0 pw=0 time=115594 us)
    115509 TABLE ACCESS FULL SECTORS PARTITION: 1 2 (cr=5547 pr=0 pw=0 time=115586 us)
    select count(*)
    from
    mdsys.geodetic_srids where srid = 99900001
    call count cpu elapsed disk query current rows
    Parse 62352 0.53 0.47 0 0 0 0
    Execute 62353 0.78 0.76 0 0 0 0
    Fetch 62352 0.65 0.65 0 187056 0 62352
    total 187057 1.96 1.90 0 187056 0 62352
    Misses in library cache during parse: 0
    Optimizer mode: ALL_ROWS
    Parsing user id: 62 (recursive depth: 2)
    Rows Row Source Operation
    1 SORT AGGREGATE (cr=3 pr=0 pw=0 time=39 us)
    0 TABLE ACCESS BY INDEX ROWID SDO_CS_SRS (cr=3 pr=0 pw=0 time=24 us)
    1 INDEX UNIQUE SCAN SYS_C003941 (cr=2 pr=0 pw=0 time=14 us)(object id 48833)
    select wktext, srid
    from
    mdsys.cs_srs where srid = 99900001
    call count cpu elapsed disk query current rows
    Parse 31176 0.20 0.20 0 0 0 0
    Execute 31176 0.18 0.26 0 0 0 0
    Fetch 31176 0.20 0.23 0 93528 0 31176
    total 93528 0.59 0.71 0 93528 0 31176
    Misses in library cache during parse: 0
    Optimizer mode: ALL_ROWS
    Parsing user id: 62 (recursive depth: 2)
    Rows Row Source Operation
    1 TABLE ACCESS BY INDEX ROWID SDO_CS_SRS (cr=3 pr=0 pw=0 time=9 us)
    1 INDEX UNIQUE SCAN SYS_C003941 (cr=2 pr=0 pw=0 time=6 us)(object id 48833)
    OVERALL TOTALS FOR ALL NON-RECURSIVE STATEMENTS
    call count cpu elapsed disk query current rows
    Parse 3 0.00 0.00 0 0 0 0
    Execute 570 0.28 0.25 0 1707 0 570
    Fetch 0 0.00 0.00 0 0 0 0
    total 573 0.28 0.25 0 1707 0 570
    Misses in library cache during parse: 0
    OVERALL TOTALS FOR ALL RECURSIVE STATEMENTS
    call count cpu elapsed disk query current rows
    Parse 93529 0.73 0.68 0 0 0 0
    Execute 93530 0.96 1.03 0 0 0 0
    Fetch 102041 32.42 33.94 0 1286982 0 102040
    total 289100 34.12 35.66 0 1286982 0 102040
    Misses in library cache during parse: 0
    93532 user SQL statements in session.
    0 internal SQL statements in session.
    93532 SQL statements in session.
    Trace file: D:\oracle\product\10.2.0\admin\dae\udump\dae_ora_17004_refcursor.trc
    Trace file compatibility: 10.01.00
    Sort options: default
    0 session in tracefile.
    93532 user SQL statements in trace file.
    0 internal SQL statements in trace file.
    93532 SQL statements in trace file.
    5 unique SQL statements in trace file.
    944521 lines in trace file.
    90 elapsed seconds in trace file.
    2. Direct SQL execution:
    TKPROF: Release 10.2.0.1.0 - Production on Wed May 16 11:03:53 2007
    Copyright (c) 1982, 2005, Oracle. All rights reserved.
    Trace file: D:\oracle\product\10.2.0\admin\dae\udump\dae_ora_17004_sql2.trc
    Sort options: default
    count = number of times OCI procedure was executed
    cpu = cpu time in seconds executing
    elapsed = elapsed time in seconds executing
    disk = number of physical reads of buffers from disk
    query = number of buffers gotten for consistent read
    current = number of buffers gotten in current mode (usually for update)
    rows = number of rows processed by the fetch or execute call
    BEGIN DBMS_OUTPUT.GET_LINES(:LINES, :NUMLINES); END;
    call count cpu elapsed disk query current rows
    Parse 2 0.00 0.00 0 0 0 0
    Execute 2 0.00 0.00 0 6 0 2
    Fetch 0 0.00 0.00 0 0 0 0
    total 4 0.00 0.00 0 6 0 2
    Misses in library cache during parse: 0
    Optimizer mode: ALL_ROWS
    Parsing user id: 75
    select Category, Sub_Category, Param_Name, Param_Value
    from
    ( ( select distinct 0 as order_c,'TCH Analysis' as Category, NULL as
    Sub_Category,0 as Param_Id, 'Analyzed Sector' as Param_Name, :p_sectorid_1
    as Param_Value, 0 as SORTORDER, 0 as DISTANCE from dual)
    UNION select
    order_c,Category,Sub_Category,Param_Id,Param_Name,stragg(Param_Value) as
    Param_Value,1 as SORTORDER, 0 as DISTANCE from ( select distinct 1 as
    order_c,'TCH Analysis' as Category, NULL as Sub_Category,0 as Param_Id,
    'TCH' as Param_Name, to_char(CHANNEL) as Param_Value, 1 as SORTORDER, 0 as
    DISTANCE from sector_freq_params where SECTOR_ID=:p_SectorId_2 and
    CHAN_TYPE_ID = 2) group by order_c,Category,Sub_Category,Param_Id,
    Param_Name,SORTORDER
    UNION (select r.rr + 1 order_c, 'TCH Analysis' as
    Category, to_char(Sub_Category) as Sub_Category,
    decode(r.rr, 1, 1, 2, 3, 3,
    3, 4, 4, 5, 4) Param_Id,
    decode(r.rr, 1, 'Sector Name', 2, 'Channel
    Number', 3, 'BSIC', 4, 'Relationship', 5, 'Distance to Sector (mi)')
    Param_Name,
    decode(r.rr, 1, SECTOR_ID, 2, Channel_Number, 3, BSIC, 4,
    Relationship, 5, Distance) Param_Value, SORTORDER, DISTANCE from
    (select
    rownum Sub_Category, SECTOR_ID, SORTORDER, Channel_Number, BSIC,
    Relationship, DISTANCE
    from dae_admin.TCH_ANALYSIS_VIEW where
    SELECTED_SECTOR_ID = :p_sectorid_3 and
    SDO_WITHIN_DISTANCE(GEOLOC,
    SELECTED_GEOLOC, 'unit=MILE,distance=25')='TRUE') qry,
    (select 1 rr from
    dual union select 2 from dual union select 3 from dual union select 4 from
    dual union select 5 from dual) r)) order by SORTORDER, DISTANCE, order_c
    asc
    call count cpu elapsed disk query current rows
    Parse 1 0.00 0.00 0 0 0 0
    Execute 1 0.04 0.03 0 1167 0 0
    Fetch 569 1.20 1.25 0 71026 2 8512
    total 571 1.25 1.29 0 72193 2 8512
    Misses in library cache during parse: 1
    Misses in library cache during execute: 1
    Optimizer mode: ALL_ROWS
    Parsing user id: 75
    Rows Row Source Operation
    8512 SORT ORDER BY (cr=86691 pr=0 pw=0 time=1372298 us)
    8512 VIEW (cr=86691 pr=0 pw=0 time=1367047 us)
    8512 SORT UNIQUE (cr=86691 pr=0 pw=0 time=1358534 us)
    8512 UNION-ALL (cr=86691 pr=0 pw=0 time=3191633 us)
    1 FAST DUAL (cr=0 pr=0 pw=0 time=2 us)
    1 SORT GROUP BY (cr=2457 pr=0 pw=0 time=16109 us)
    3 VIEW (cr=2457 pr=0 pw=0 time=15657 us)
    3 HASH UNIQUE (cr=2457 pr=0 pw=0 time=15651 us)
    3 PARTITION RANGE ALL PARTITION: 1 2 (cr=2457 pr=0 pw=0 time=3875 us)
    3 TABLE ACCESS FULL SECTOR_FREQ_PARAMS PARTITION: 1 2 (cr=2457 pr=0 pw=0 time=3869 us)
    8510 MERGE JOIN CARTESIAN (cr=84234 pr=0 pw=0 time=1166420 us)
    1702 VIEW (cr=84234 pr=0 pw=0 time=1181142 us)
    1702 COUNT (cr=8834 pr=0 pw=0 time=80783 us)
    1702 HASH JOIN (cr=8834 pr=0 pw=0 time=79089 us)
    11349 HASH JOIN (cr=6377 pr=0 pw=0 time=51629 us)
    3 PARTITION RANGE ALL PARTITION: 1 2 (cr=2457 pr=0 pw=0 time=3823 us)
    3 TABLE ACCESS FULL SECTOR_FREQ_PARAMS PARTITION: 1 2 (cr=2457 pr=0 pw=0 time=3817 us)
    3783 NESTED LOOPS (cr=3920 pr=0 pw=0 time=28374 us)
    1 PARTITION RANGE ALL PARTITION: 1 2 (cr=4 pr=0 pw=0 time=91 us)
    1 TABLE ACCESS BY LOCAL INDEX ROWID SECTORS PARTITION: 1 2 (cr=4 pr=0 pw=0 time=78 us)
    1 INDEX RANGE SCAN SECTORS_SECTORID_IND PARTITION: 1 2 (cr=3 pr=0 pw=0 time=39 us)(object id 1834180)
    3783 PARTITION RANGE ALL PARTITION: 1 2 (cr=3916 pr=0 pw=0 time=24510 us)
    3783 TABLE ACCESS BY LOCAL INDEX ROWID SECTORS PARTITION: 1 2 (cr=3916 pr=0 pw=0 time=24504 us)
    3784 DOMAIN INDEX SECTORS_SX (cr=365 pr=0 pw=0 time=13144 us)
    478112 PARTITION RANGE ALL PARTITION: 1 2 (cr=2457 pr=0 pw=0 time=87 us)
    478112 TABLE ACCESS FULL SECTOR_FREQ_PARAMS PARTITION: 1 2 (cr=2457 pr=0 pw=0 time=69 us)
    8510 BUFFER SORT (cr=0 pr=0 pw=0 time=2577 us)
    5 VIEW (cr=0 pr=0 pw=0 time=51 us)
    5 SORT UNIQUE (cr=0 pr=0 pw=0 time=41 us)
    5 UNION-ALL (cr=0 pr=0 pw=0 time=22 us)
    1 FAST DUAL (cr=0 pr=0 pw=0 time=1 us)
    1 FAST DUAL (cr=0 pr=0 pw=0 time=0 us)
    1 FAST DUAL (cr=0 pr=0 pw=0 time=3 us)
    1 FAST DUAL (cr=0 pr=0 pw=0 time=1 us)
    1 FAST DUAL (cr=0 pr=0 pw=0 time=1 us)
    select text
    from
    view$ where rowid=:1
    call count cpu elapsed disk query current rows
    Parse 2 0.00 0.00 0 0 0 0
    Execute 2 0.00 0.00 0 0 0 0
    Fetch 2 0.00 0.00 0 4 0 2
    total 6 0.00 0.00 0 4 0 2
    Misses in library cache during parse: 0
    Optimizer mode: CHOOSE
    Parsing user id: SYS (recursive depth: 1)
    Rows Row Source Operation
    1 TABLE ACCESS BY USER ROWID VIEW$ (cr=1 pr=0 pw=0 time=14 us)
    select u.name, o.name, a.interface_version#, o.obj#
    from
    association$ a, user$ u, obj$ o where a.obj# = :1
    and a.property = :2
    and a.statstype# = o.obj# and
    u.user# = o.owner#
    call count cpu elapsed disk query current rows
    Parse 5 0.00 0.00 0 0 0 0
    Execute 6 0.00 0.00 0 0 0 0
    Fetch 5 0.00 0.00 0 33 0 4
    total 16 0.00 0.00 0 33 0 4
    Misses in library cache during parse: 0
    Optimizer mode: CHOOSE
    Parsing user id: SYS (recursive depth: 1)
    Rows Row Source Operation
    1 NESTED LOOPS (cr=8 pr=0 pw=0 time=82 us)
    1 NESTED LOOPS (cr=6 pr=0 pw=0 time=43 us)
    1 TABLE ACCESS BY INDEX ROWID ASSOCIATION$ (cr=2 pr=0 pw=0 time=26 us)
    1 INDEX RANGE SCAN ASSOC1 (cr=1 pr=0 pw=0 time=11 us)(object id 387)
    1 TABLE ACCESS BY INDEX ROWID OBJ$ (cr=4 pr=0 pw=0 time=14 us)
    1 INDEX UNIQUE SCAN I_OBJ1 (cr=3 pr=0 pw=0 time=9 us)(object id 36)
    1 TABLE ACCESS CLUSTER USER$ (cr=2 pr=0 pw=0 time=36 us)
    1 INDEX UNIQUE SCAN I_USER# (cr=1 pr=0 pw=0 time=3 us)(object id 11)
    declare
    cost sys.ODCICost := sys.ODCICost(NULL, NULL, NULL, NULL);
    obj0 "MDSYS"."SDO_GEOMETRY" := "MDSYS"."SDO_GEOMETRY"(NULL, NULL, NULL, NULL, NULL);
    obj1 "MDSYS"."SDO_GEOMETRY" := "MDSYS"."SDO_GEOMETRY"(NULL, NULL, NULL, NULL, NULL);
    begin
    :1 := "MDSYS"."SDO_STATISTICS".ODCIStatsFunctionCost(
    sys.ODCIFuncInfo('MDSYS',
    'SDO_3GL',
    'WITHIN_DISTANCE',
    2),
    cost,
    sys.ODCIARGDESCLIST(sys.ODCIARGDESC(2, 'SECTORS', 'DAE_ADMIN', '"GEOLOC"', NULL, NULL, NULL), sys.ODCIARGDESC(2, 'SECTORS', 'DAE_ADMIN', '"GEOLOC"', NULL, NULL, NULL), sys.ODCIARGDESC(3, NULL, NULL, NULL, NULL, NULL, NULL))
    , obj0, obj1, :5,
    sys.ODCIENV(:6,:7,:8,:9));
    if cost.CPUCost IS NULL then
    :2 := -1.0;
    else
    :2 := cost.CPUCost;
    end if;
    if cost.IOCost IS NULL then
    :3 := -1.0;
    else
    :3 := cost.IOCost;
    end if;
    if cost.NetworkCost IS NULL then
    :4 := -1.0;
    else
    :4 := cost.NetworkCost;
    end if;
    exception
    when others then
    raise;
    end;
    call count cpu elapsed disk query current rows
    Parse 2 0.00 0.00 0 0 0 0
    Execute 2 0.00 0.00 0 0 0 2
    Fetch 0 0.00 0.00 0 0 0 0
    total 4 0.00 0.00 0 0 0 2
    Misses in library cache during parse: 0
    Optimizer mode: ALL_ROWS
    Parsing user id: 75 (recursive depth: 1)
    declare
    sel number;
    obj0 "MDSYS"."SDO_GEOMETRY" := "MDSYS"."SDO_GEOMETRY"(NULL, NULL, NULL, NULL, NULL);
    obj1 "MDSYS"."SDO_GEOMETRY" := "MDSYS"."SDO_GEOMETRY"(NULL, NULL, NULL, NULL, NULL);
    begin
    :1 := "MDSYS"."SDO_STATISTICS".ODCIStatsSelectivity(
    sys.ODCIPREDINFO('MDSYS',
    'SDO_3GL',
    'WITHIN_DISTANCE',
    173),
    sel,
    sys.ODCIARGDESCLIST(sys.ODCIARGDESC(3, NULL, NULL, NULL, NULL, NULL, NULL), sys.ODCIARGDESC(3, NULL, NULL, NULL, NULL, NULL, NULL), sys.ODCIARGDESC(2, 'SECTORS', 'DAE_ADMIN', '"GEOLOC"', NULL, NULL, NULL), sys.ODCIARGDESC(2, 'SECTORS', 'DAE_ADMIN', '"GEOLOC"', NULL, NULL, NULL), sys.ODCIARGDESC(3, NULL, NULL, NULL, NULL, NULL, NULL)),
    :3,
    :4
    , obj0, obj1, :5,
    sys.ODCIENV(:6,:7,:8,:9));
    if sel IS NULL then
    :2 := -1.0;
    else
    :2 := sel;
    end if;
    exception
    when others then
    raise;
    end;
    call count cpu elapsed disk query current rows
    Parse 1 0.00 0.00 0 0 0 0
    Execute 1 0.00 0.00 0 0 0 1
    Fetch 0 0.00 0.00 0 0 0 0
    total 2 0.00 0.00 0 0 0 1
    Misses in library cache during parse: 0
    Optimizer mode: ALL_ROWS
    Parsing user id: 75 (recursive depth: 1)
    select a.default_cpu_cost, a.default_io_cost
    from
    association$ a where a.obj# = :1
    and a.property = :2
    call count cpu elapsed disk query current rows
    Parse 1 0.00 0.00 0 0 0 0
    Execute 1 0.00 0.00 0 0 0 0
    Fetch 1 0.00 0.00 0 1 0 0
    total 3 0.00 0.00 0 1 0 0
    Misses in library cache during parse: 0
    Optimizer mode: CHOOSE
    Parsing user id: SYS (recursive depth: 1)
    Rows Row Source Operation
    0 TABLE ACCESS BY INDEX ROWID ASSOCIATION$ (cr=1 pr=0 pw=0 time=7 us)
    0 INDEX RANGE SCAN ASSOC1 (cr=1 pr=0 pw=0 time=6 us)(object id 387)
    declare
    cost sys.ODCICost := sys.ODCICost(NULL, NULL, NULL, NULL);
    obj1 "MDSYS"."SDO_GEOMETRY" := "MDSYS"."SDO_GEOMETRY"(NULL, NULL, NULL, NULL, NULL);
    obj2 "MDSYS"."SDO_GEOMETRY" := "MDSYS"."SDO_GEOMETRY"(NULL, NULL, NULL, NULL, NULL);
    begin
    :1 := "MDSYS"."SDO_STATISTICS".ODCIStatsIndexCost(
    sys.ODCIINDEXINFO('DAE_ADMIN',
    'SECTORS_SX',
    sys.ODCICOLINFOLIST(sys.ODCICOLINFO('DAE_ADMIN', 'SECTORS', '"GEOLOC"', 'SDO_GEOMETRY', 'MDSYS', NULL)),
    NULL,
    3,
    0),
    1.00000000,
    cost,
    sys.ODCIQUERYINFO(2,
    NULL),
    sys.ODCIPREDINFO('MDSYS',
    'SDO_WITHIN_DISTANCE',
    NULL,
    141),
    sys.ODCIARGDESCLIST(sys.ODCIARGDESC(3, NULL, NULL, NULL, NULL, NULL, NULL), sys.ODCIARGDESC(3, NULL, NULL, NULL, NULL, NULL, NULL), sys.ODCIARGDESC(2, 'SECTORS', 'DAE_ADMIN', '"GEOLOC"', NULL, NULL, NULL), sys.ODCIARGDESC(2, 'SECTORS', 'DAE_ADMIN', '"GEOLOC"', NULL, NULL, NULL), sys.ODCIARGDESC(3, NULL, NULL, NULL, NULL, NULL, NULL)),
    :6,
    :7
    , obj2, :8,
    sys.ODCIENV(:9,:10,:11,:12));
    if cost.CPUCost IS NULL then
    :2 := -1.0;
    else
    :2 := cost.CPUCost;
    end if;
    if cost.IOCost IS NULL then
    :3 := -1.0;
    else
    :3 := cost.IOCost;
    end if;
    if cost.NetworkCost IS NULL then
    :4 := -1.0;
    else
    :4 := cost.NetworkCost;
    end if;
    :5 := cost.IndexCostInfo;
    exception
    when others then
    raise;
    end;
    call count cpu elapsed disk query current rows
    Parse 1 0.00 0.00 0 0 0 0
    Execute 1 0.00 0.00 0 0 0 0
    Fetch 0 0.00 0.00 0 0 0 0
    total 2 0.00 0.00 0 0 0 0
    Misses in library cache during parse: 0
    Optimizer mode: ALL_ROWS
    Parsing user id: 75 (recursive depth: 1)
    SELECT diminfo, nvl(srid,-1)
    FROM
    ALL_SDO_GEOM_METADATA WHERE OWNER = 'DAE_ADMIN' AND TABLE_NAME =
    NLS_UPPER('SECTORS') AND '"'||COLUMN_NAME||'"' = '"GEOLOC"'
    call count cpu elapsed disk query current rows
    Parse 1 0.00 0.00 0 0 0 0
    Execute 1 0.00 0.00 0 0 0 0
    Fetch 1 0.00 0.00 0 44 0 1
    total 3 0.00 0.00 0 44 0 1
    Misses in library cache during parse: 0
    Optimizer mode: ALL_ROWS
    Parsing user id: 62 (recursive depth: 1)
    Rows Row Source Operation
    1 TABLE ACCESS BY INDEX ROWID SDO_GEOM_METADATA_TABLE (cr=44 pr=0 pw=0 time=1743 us)
    1 INDEX RANGE SCAN SDO_GEOM_IDX (cr=43 pr=0 pw=0 time=1732 us)(object id 45847)
    1 UNION-ALL (cr=42 pr=0 pw=0 time=1702 us)
    1 FILTER (cr=42 pr=0 pw=0 time=1697 us)
    1 HASH JOIN (cr=42 pr=0 pw=0 time=1694 us)
    1 MERGE JOIN CARTESIAN (cr=42 pr=0 pw=0 time=955 us)
    1 NESTED LOOPS (cr=42 pr=0 pw=0 time=462 us)
    1 NESTED LOOPS OUTER (cr=38 pr=0 pw=0 time=446 us)
    1 HASH JOIN OUTER (cr=35 pr=0 pw=0 time=434 us)
    1 NESTED LOOPS OUTER (cr=17 pr=0 pw=0 time=111 us)
    1 NESTED LOOPS OUTER (cr=17 pr=0 pw=0 time=107 us)
    1 NESTED LOOPS (cr=17 pr=0 pw=0 time=100 us)
    3 NESTED LOOPS (cr=9 pr=0 pw=0 time=61 us)
    1 TABLE ACCESS BY INDEX ROWID USER$ (cr=2 pr=0 pw=0 time=16 us)
    1 INDEX UNIQUE SCAN I_USER1 (cr=1 pr=0 pw=0 time=6 us)(object id 44)
    3 TABLE ACCESS BY INDEX ROWID OBJ$ (cr=7 pr=0 pw=0 time=44 us)
    3 INDEX RANGE SCAN I_OBJ2 (cr=4 pr=0 pw=0 time=16 us)(object id 37)
    1 TABLE ACCESS CLUSTER TAB$ (cr=8 pr=0 pw=0 time=36 us)
    1 INDEX UNIQUE SCAN I_OBJ# (cr=5 pr=0 pw=0 time=18 us)(object id 3)
    0 TABLE ACCESS BY INDEX ROWID OBJ$ (cr=0 pr=0 pw=0 time=3 us)
    0 INDEX UNIQUE SCAN I_OBJ1 (cr=0 pr=0 pw=0 time=2 us)(object id 36)
    0 INDEX UNIQUE SCAN I_OBJ1 (cr=0 pr=0 pw=0 time=1 us)(object id 36)
    75 TABLE ACCESS FULL USER$ (cr=18 pr=0 pw=0 time=35 us)
    0 TABLE ACCESS CLUSTER SEG$ (cr=3 pr=0 pw=0 time=10 us)
    0 INDEX UNIQUE SCAN I_FILE#_BLOCK# (cr=3 pr=0 pw=0 time=9 us)(object id 9)
    1 TABLE ACCESS CLUSTER TS$ (cr=4 pr=0 pw=0 time=13 us)
    1 INDEX UNIQUE SCAN I_TS# (cr=2 pr=0 pw=0 time=6 us)(object id 7)
    1 BUFFER SORT (cr=0 pr=0 pw=0 time=489 us)
    1 FIXED TABLE FULL X$KSPPI (cr=0 pr=0 pw=0 time=470 us)
    1120 FIXED TABLE FULL X$KSPPCV (cr=0 pr=0 pw=0 time=1125 us)
    0 HASH JOIN (cr=0 pr=0 pw=0 time=0 us)
    0 INDEX RANGE SCAN I_OBJAUTH1 (cr=0 pr=0 pw=0 time=0 us)(object id 103)
    0 FIXED TABLE FULL X$KZSRO (cr=0 pr=0 pw=0 time=0 us)
    0 FIXED TABLE FULL X$KZSPR (cr=0 pr=0 pw=0 time=0 us)
    0 FILTER (cr=0 pr=0 pw=0 time=0 us)
    0 HASH JOIN (cr=0 pr=0 pw=0 time=0 us)
    0 MERGE JOIN CARTESIAN (cr=0 pr=0 pw=0 time=0 us)
    0 NESTED LOOPS OUTER (cr=0 pr=0 pw=0 time=0 us)
    0 NESTED LOOPS OUTER (cr=0 pr=0 pw=0 time=0 us)
    0 NESTED LOOPS OUTER (cr=0 pr=0 pw=0 time=0 us)
    0 NESTED LOOPS OUTER (cr=0 pr=0 pw=0 time=0 us)
    0 NESTED LOOPS OUTER (cr=0 pr=0 pw=0 time=0 us)
    0 NESTED LOOPS (cr=0 pr=0 pw=0 time=0 us)
    0 NESTED LOOPS (cr=0 pr=0 pw=0 time=0 us)
    0 NESTED LOOPS OUTER (cr=0 pr=0 pw=0 time=0 us)
    0 NESTED LOOPS (cr=0 pr=0 pw=0 time=0 us)
    0 NESTED LOOPS (cr=0 pr=0 pw=0 time=0 us)
    0 NESTED LOOPS (cr=0 pr=0 pw=0 time=0 us)
    0 NESTED LOOPS (cr=0 pr=0 pw=0 time=0 us)
    0 NESTED LOOPS (cr=0 pr=0 pw=0 time=0 us)
    0 TABLE ACCESS BY INDEX ROWID USER$ (cr=0 pr=0 pw=0 time=0 us)
    0 INDEX UNIQUE SCAN I_USER1 (cr=0 pr=0 pw=0 time=0 us)(object id 44)
    0 TABLE ACCESS BY INDEX ROWID OBJ$ (cr=0 pr=0 pw=0 time=0 us)
    0 INDEX RANGE SCAN I_OBJ2 (cr=0 pr=0 pw=0 time=0 us)(object id 37)
    0 TABLE ACCESS CLUSTER TAB$ (cr=0 pr=0 pw=0 time=0 us)
    0 INDEX UNIQUE SCAN I_OBJ# (cr=0 pr=0 pw=0 time=0 us)(object id 3)
    0 TABLE ACCESS CLUSTER COL$ (cr=0 pr=0 pw=0 time=0 us)
    0 TABLE ACCESS BY INDEX ROWID COLTYPE$ (cr=0 pr=0 pw=0 time=0 us)
    0 INDEX UNIQUE SCAN I_COLTYPE2 (cr=0 pr=0 pw=0 time=0 us)(object id 170)
    0 TABLE ACCESS CLUSTER TS$ (cr=0 pr=0 pw=0 time=0 us)
    0 INDEX UNIQUE SCAN I_TS# (cr=0 pr=0 pw=0 time=0 us)(object id 7)
    0 TABLE ACCESS CLUSTER SEG$ (cr=0 pr=0 pw=0 time=0 us)
    0 INDEX UNIQUE SCAN I_FILE#_BLOCK# (cr=0 pr=0 pw=0 time=0 us)(object id 9)
    0 TABLE ACCESS BY INDEX ROWID OBJ$ (cr=0 pr=0 pw=0 time=0 us)
    0 INDEX RANGE SCAN I_OBJ3 (cr=0 pr=0 pw=0 time=0 us)(object id 38)
    0 TABLE ACCESS CLUSTER USER$ (cr=0 pr=0 pw=0 time=0 us)
    0 INDEX UNIQUE SCAN I_USER# (cr=0 pr=0 pw=0 time=0 us)(object id 11)
    0 INDEX UNIQUE SCAN I_OBJ1 (cr=0 pr=0 pw=0 time=0 us)(object id 36)
    0 TABLE ACCESS BY INDEX ROWID OBJ$ (cr=0 pr=0 pw=0 time=0 us)
    0 INDEX UNIQUE SCAN I_OBJ1 (cr=0 pr=0 pw=0 time=0 us)(object id 36)
    0 TABLE ACCESS CLUSTER USER$ (cr=0 pr=0 pw=0 time=0 us)
    0 INDEX UNIQUE SCAN I_USER# (cr=0 pr=0 pw=0 time=0 us)(object id 11)
    0 TABLE ACCESS BY INDEX ROWID OBJ$ (cr=0 pr=0 pw=0 time=0 us)
    0 INDEX UNIQUE SCAN I_OBJ1 (cr=0 pr=0 pw=0 time=0 us)(object id 36)
    0 TABLE ACCESS CLUSTER USER$ (cr=0 pr=0 pw=0 time=0 us)
    0 INDEX UNIQUE SCAN I_USER# (cr=0 pr=0 pw=0 time=0 us)(object id 11)
    0 BUFFER SORT (cr=0 pr=0 pw=0 time=0 us)
    0 FIXED TABLE FULL X$KSPPI (cr=0 pr=0 pw=0 time=0 us)
    0 FIXED TABLE FULL X$KSPPCV (cr=0 pr=0 pw=0 time=0 us)
    0 HASH JOIN (cr=0 pr=0 pw=0 time=0 us)
    0 INDEX RANGE SCAN I_OBJAUTH1 (cr=0 pr=0 pw=0 time=0 us)(object id 103)
    0 FIXED TABLE FULL X$KZSRO (cr=0 pr=0 pw=0 time=0 us)
    0 FIXED TABLE FULL X$KZSPR (cr=0 pr=0 pw=0 time=0 us)
    0 VIEW ALL_SYNONYMS (cr=0 pr=0 pw=0 time=0 us)
    0 SORT UNIQUE (cr=0 pr=0 pw=0 time=0 us)
    0 UNION-ALL (cr=0 pr=0 pw=0 time=0 us)
    0 FILTER (cr=0 pr=0 pw=0 time=0 us)
    0 NESTED LOOPS (cr=0 pr=0 pw=0 time=0 us)
    0 NESTED LOOPS (cr=0 pr=0 pw=0 time=0 us)
    0 TABLE ACCESS BY INDEX ROWID USER$ (cr=0 pr=0 pw=0 time=0 us)
    0 INDEX UNIQUE SCAN I_USER1 (cr=0 pr=0 pw=0 time=0 us)(object id 44)
    0 TABLE ACCESS BY INDEX ROWID OBJ$ (cr=0 pr=0 pw=0 time=0 us)
    0 INDEX RANGE SCAN I_OBJ2 (cr=0 pr=0 pw=0 time=0 us)(object id 37)
    0 TABLE ACCESS BY INDEX ROWID SYN$ (cr=0 pr=0 pw=0 time=0 us)
    0 INDEX UNIQUE SCAN I_SYN1 (cr=0 pr=0 pw=0 time=0 us)(object id 101)
    0 FILTER (cr=0 pr=0 pw=0 time=0 us)
    0 FILTER (cr=0 pr=0 pw=0 time=0 us)
    0 NESTED LOOPS (cr=0 pr=0 pw=0 time=0 us)
    0 NESTED LOOPS (cr=0 pr=0 pw=0 time=0 us)
    0 TABLE ACCESS BY INDEX ROWID USER$ (cr=0 pr=0 pw=0 time=0 us)
    0 INDEX UNIQUE SCAN I_USER1 (cr=0 pr=0 pw=0 time=0 us)(object id 44)
    0 TABLE ACCESS BY INDEX ROWID OBJ$ (cr=0 pr=0 pw=0 time=0 us)
    0 INDEX RANGE SCAN I_OBJ2 (cr=0 pr=0 pw=0 time=0 us)(object id 37)
    0 INDEX RANGE SCAN I_OBJAUTH1 (cr=0 pr=0 pw=0 time=0 us)(object id 103)
    0 FIXED TABLE FULL X$KZSRO (cr=0 pr=0 pw=0 time=0 us)
    0 FIXED TABLE FULL X$KZSPR (cr=0 pr=0 pw=0 time=0 us)
    0 NESTED LOOPS (cr=0 pr=0 pw=0 time=0 us)
    0 HASH JOIN (cr=0 pr=0 pw=0 time=0 us)
    0 NESTED LOOPS (cr=0 pr=0 pw=0 time=0 us)
    0 TABLE ACCESS BY INDEX ROWID USER$ (cr=0 pr=0 pw=0 time=0 us)
    0 INDEX UNIQUE SCAN I_USER1 (cr=0 pr=0 pw=0 time=0 us)(object id 44)
    0 TABLE ACCESS BY INDEX ROWID OBJ$ (cr=0 pr=0 pw=0 time=0 us)
    0 INDEX RANGE SCAN I_OBJ2 (cr=0 pr=0 pw=0 time=0 us)(object id 37)
    0 VIEW ALLSYNONYMS_TREE (cr=0 pr=0 pw=0 time=0 us)
    0 CONNECT BY WITH FILTERING (cr=0 pr=0 pw=0 time=0 us)
    0 FILTER (cr=0 pr=0 pw=0 time=0 us)
    0 COUNT (cr=0 pr=0 pw=0 time=0 us)
    0 HASH JOIN (cr=0 pr=0 pw=0 time=0 us)
    0 TABLE ACCESS FULL USER$ (cr=0 pr=0 pw=0 time=0 us)
    0 NESTED LOOPS (cr=0 pr=0 pw=0 time=0 us)
    0 HASH JOIN (cr=0 pr=0 pw=0 time=0 us)
    0 TABLE ACCESS FULL SYN$ (cr=0 pr=0 pw=0 time=0 us)
    0 HASH JOIN (cr=0 pr=0 pw=0 time=0 us)
    0 TABLE ACCESS FULL USER$ (cr=0 pr=0 pw=0 time=0 us)
    0 TABLE ACCESS FULL OBJ$ (cr=0 pr=0 pw=0 time=0 us)
    0 TABLE ACCESS BY INDEX ROWID OBJ$ (cr=0 pr=0 pw=0 time=0 us)
    0 INDEX UNIQUE SCAN I_OBJ1 (cr=0 pr=0 pw=0 time=0 us)(object id 36)
    0 FILTER (cr=0 pr=0 pw=0 time=0 us)
    0 NESTED LOOPS (cr=0 pr=0 pw=0 time=0 us)
    0 NESTED LOOPS (cr=0 pr=0 pw=0 time=0 us)
    0 NESTED LOOPS (cr=0 pr=0 pw=0 time=0 us)
    0 TABLE ACCESS BY INDEX ROWID SYN$ (cr=0 pr=0 pw=0 time=0 us)
    0 INDEX UNIQUE SCAN I_SYN1 (cr=0 pr=0 pw=0 time=0 us)(object id 101)
    0 TABLE ACCESS BY INDEX ROWID USER$ (cr=0 pr=0 pw=0 time=0 us)
    0 INDEX UNIQUE SCAN I_USER1 (cr=0 pr=0 pw=0 time=0 us)(object id 44)
    0 TABLE ACCESS BY INDEX ROWID OBJ$ (cr=0 pr=0 pw=0 time=0 us)
    0 INDEX RANGE SCAN I_OBJ2 (cr=0 pr=0 pw=0 time=0 us)(object id 37)
    0 INDEX RANGE SCAN I_OBJAUTH1 (cr=0 pr=0 pw=0 time=0 us)(object id 103)
    0 FIXED TABLE FULL X$KZSRO (cr=0 pr=0 pw=0 time=0 us)
    0 HASH JOIN (cr=0 pr=0 pw=0 time=0 us)
    0 CONNECT BY PUMP (cr=0 pr=0 pw=0 time=0 us)
    0 COUNT (cr=0 pr=0 pw=0 time=0 us)
    0 HASH JOIN (cr=0 pr=0 pw=0 time=0 us)
    0 TABLE ACCESS FULL USER$ (cr=0 pr=0 pw=0 time=0 us)
    0 NESTED LOOPS (cr=0 pr=0 pw=0 time=0 us)
    0 HASH JOIN (cr=0 pr=0 pw=0 time=0 us)
    0 TABLE ACCESS FULL SYN$ (cr=0 pr=0 pw=0 time=0 us)
    0 HASH JOIN (cr=0 pr=0 pw=0 time=0 us)
    0 TABLE ACCESS FULL USER$ (cr=0 pr=0 pw=0 time=0 us)
    0 TABLE ACCESS FULL OBJ$ (cr=0 pr=0 pw=0 time=0 us)
    0 TABLE ACCESS BY INDEX ROWID OBJ$ (cr=0 pr=0 pw=0 time=0 us)
    0 INDEX UNIQUE SCAN I_OBJ1 (cr=0 pr=0 pw=0 time=0 us)(object id 36)
    0 COUNT (cr=0 pr=0 pw=0 time=0 us)
    0 HASH JOIN (cr=0 pr=0 pw=0 time=0 us)
    0 TABLE ACCESS FULL USER$ (cr=0 pr=0 pw=0 time=0 us)
    0 NESTED LOOPS (cr=0 pr=0 pw=0 time=0 us)
    0 HASH JOIN (cr=0 pr=0 pw=0 time=0 us)
    0 TABLE ACCESS FULL SYN$ (cr=0 pr=0 pw=0 time=0 us)
    0 HASH JOIN (cr=0 pr=0 pw=0 time=0 us)
    0 TABLE ACCESS FULL USER$ (cr=0 pr=0 pw=0 time=0 us)
    0 TABLE ACCESS FULL OBJ$ (cr=0 pr=0 pw=0 time=0 us)
    0 TABLE ACCESS BY INDEX ROWID OBJ$ (cr=0 pr=0 pw=0 time=0 us)
    0 INDEX UNIQUE SCAN I_OBJ1 (cr=0 pr=0 pw=0 time=0 us)(object id 36)
    0 FILTER (cr=0 pr=0 pw=0 time=0 us)
    0 NESTED LOOPS (cr=0 pr=0 pw=0 time=0 us)
    0 NESTED LOOPS (cr=0 pr=0 pw=0 time=0 us)
    0 NESTED LOOPS (cr=0 pr=0 pw=0 time=0 us)
    0 TABLE ACCESS BY INDEX ROWID SYN$ (cr=0 pr=0 pw=0 time=0 us)
    0 INDEX UNIQUE SCAN I_SYN1 (cr=0 pr=0 pw=0 time=0 us)(object id 101)
    0 TABLE ACCESS BY INDEX ROWID USER$ (cr=0 pr=0 pw=0 time=0 us)
    0 INDEX UNIQUE SCAN I_USER1 (cr=0 pr=0 pw=0 time=0 us)(object id 44)
    0 TABLE ACCESS BY INDEX ROWID OBJ$ (cr=0 pr=0 pw=0 time=0 us)
    0 INDEX RANGE SCAN I_OBJ2 (cr=0 pr=0 pw=0 time=0 us)(object id 37)
    0 INDEX RANGE SCAN I_OBJAUTH1 (cr=0 pr=0 pw=0 time=0 us)(object id 103)
    0 FIXED TABLE FULL X$KZSRO (cr=0 pr=0 pw=0 time=0 us)
    0 TABLE ACCESS BY INDEX ROWID SYN$ (cr=0 pr=0 pw=0 time=0 us)
    0 INDEX UNIQUE SCAN I_SYN1 (cr=0 pr=0 pw=0 time=0 us)(object id 101)
    0 FILTER (cr=0 pr=0 pw=0 time=0 us)
    0 NESTED LOOPS (cr=0 pr=0 pw=0 time=0 us)
    0 NESTED LOOPS OUTER (cr=0 pr=0 pw=0 time=0 us)
    0 NESTED LOOPS (cr=0 pr=0 pw=0 time=0 us)
    0 TABLE ACCESS BY INDEX ROWID USER$ (cr=0 pr=0 pw=0 time=0 us)
    0 INDEX UNIQUE SCAN I_USER1 (cr=0 pr=0 pw=0 time=0 us)(object id 44)
    0 TABLE ACCESS BY INDEX ROWID OBJ$ (cr=0 pr=0 pw=0 time=0 us)
    0 INDEX RANGE SCAN I_OBJ2 (cr=0 pr=0 pw=0 time=0 us)(object id 37)
    0 INDEX UNIQUE SCAN I_TYPED_VIEW1 (cr=0 pr=0 pw=0 time=0 us)(object id 100)
    0 INDEX UNIQUE SCAN I_VIEW1 (cr=0 pr=0 pw=0 time=0 us)(object id 99)
    0 NESTED LOOPS (cr=0 pr=0 pw=0 time=0 us)
    0 INDEX RANGE SCAN I_OBJAUTH1 (cr=0 pr=0 pw=0 time=0 us)(object id 103)
    0 FIXED TABLE FULL X$KZSRO (cr=0 pr=0 pw=0 time=0 us)
    0 FIXED TABLE FULL X$KZSPR (cr=0 pr=0 pw=0 time=0 us)
    SELECT nvl(sdo_level,0), nvl(sdo_numtiles,0), nvl(sdo_maxlevel, 0),
    nvl(sdo_index_table, 'DEFAULT'), sdo_index_primary, sdo_index_type,
    nvl(sdo_rtree_height, 0), nvl(sdo_rtree_num_nodes, 0),
    nvl(sdo_rtree_dimensionality, 0), nvl(sdo_rtree_fanout, 0),
    nvl(sdo_rtree_root, 'EMPTY'), nvl(sdo_rtree_seq_name, 'DEFAULT'),
    sdo_index_partition, nvl(sdo_partitioned, 0), nvl(sdo_layer_gtype,
    'DEFAULT'), nvl(sdo_index_dims, 0), nvl(sdo_rtree_pctfree, 10),
    nvl(sdo_rtree_quality, 1), nvl(sdo_index_version, 0), nvl(sdo_tablespace,
    'DEFAULT'), nvl(sdo_index_geodetic, 'FALSE'), sdo_index_status,
    nvl(sdo_nl_index_table, 'NULL'), nvl(sdo_dml_batch_size, 1),
    nvl(sdo_rtree_ent_xpnd, 0.0)
    FROM
    all_sdo_index_metadata WHERE sdo_index_owner = 'DAE_ADMIN' and
    sdo_index_name = 'SECTORS_SX' and sdo_index_partition = UPPER(:ptname)
    ORDER BY SDO_INDEX_PRIMARY
    call count cpu elapsed disk query current rows
    Parse 1 0.00 0.00 0 0 0 0
    Execute 1 0.00 0.00 0 0 0 0
    Fetch 1 0.00 0.00 0 43 0 1
    total 3 0.00 0.00 0 43 0 1
    Misses in library cache during parse: 0
    Optimizer mode: ALL_ROWS
    Parsing user id: 62 (recursive depth: 1)
    select count(*)
    from
    mdsys.geodetic_srids where srid = 99900001
    call count cpu elapsed disk query current rows
    Parse 3405 0.01 0.01 0 0 0 0
    Execute 3405 0.04 0.03 0 0 0 0
    Fetch 3405 0.07 0.03 0 10215 0 3405
    total 10215 0.14 0.08 0 10215 0 3405
    Misses in library cache during parse: 0
    Optimizer mode: ALL_ROWS
    Parsing user id: 62 (recursive depth: 1)
    Rows Row Source Operation
    1 SORT AGGREGATE (cr=3 pr=0 pw=0 time=26 us)
    0 TABLE ACCESS BY INDEX ROWID SDO_CS_SRS (cr=3 pr=0 pw=0 time=17 us)
    1 INDEX UNIQUE SCAN SYS_C003941 (cr=2 pr=0 pw=0 time=9 us)(object id 48833)
    select wktext, srid
    from
    mdsys.cs_srs where srid = 99900001
    call count cpu elapsed disk query current rows
    Parse 1704 0.00 0.01 0 0 0 0
    Execute 1704 0.00 0.01 0 0 0 0
    Fetch 1704 0.03 0.01 0 5112 0 1704
    total 5112 0.03 0.03 0 5112 0 1704
    Misses in library cache during parse: 0
    Optimizer mode: ALL_ROWS
    Parsing user id: 62 (recursive depth: 1)
    Rows Row Source Operation
    1 TABLE ACCESS BY INDEX ROWID SDO_CS_SRS (cr=3 pr=0 pw=0 time=8 us)
    1 INDEX UNIQUE SCAN SYS_C003941 (cr=2 pr=0 pw=0 time=5 us)(object id 48833)
    SELECT partition_count
    FROM
    all_part_indexes WHERE owner='DAE_ADMIN' and index_name='SECTORS_SX'
    call count cpu elapsed disk query current rows
    Parse 1 0.00 0.00 0 0 0 0
    Execute 1 0.00 0.00 0 0 0 0
    Fetch 1 0.00 0.00 0 18 0 1
    total 3 0.00 0.00 0 18 0 1
    Misses in library cache during parse: 0
    Optimizer mode: ALL_ROWS
    Parsing user id: 62 (recursive depth: 1)
    Rows Row Source Operation
    1 FILTER (cr=18 pr=0 pw=0 time=70 us)
    1 NESTED LOOPS (cr=18 pr=0 pw=0 time=67 us)
    1 NESTED LOOPS OUTER (cr=15 pr=0 pw=0 time=59 us)
    1 NESTED LOOPS (cr=13 pr=0 pw=0 time=52 us)
    1 NESTED LOOPS (cr=10 pr=0 pw=0 time=42 us)
    1 NESTED LOOPS (cr=7 pr=0 pw=0 time=29 us)
    1 TABLE ACCESS BY INDEX ROWID USER$ (cr=2 pr=0 pw=0 time=8 us)
    1 INDEX UNIQUE SCAN I_USER1 (cr=1 pr=0 pw=0 time=4 us)(object id 44)
    1 TABLE ACCESS BY INDEX ROWID OBJ$ (cr=5 pr=0 pw=0 time=20 us)
    1 INDEX RANGE SCAN I_OBJ2 (cr=4 pr=0 pw=0 time=14 us)(object id 37)
    1 TABLE ACCESS BY INDEX ROWID PARTOBJ$ (cr=3 pr=0 pw=0 time=10 us)
    1 INDEX UNIQUE SCAN I_PARTOBJ$ (cr=2 pr=0 pw=0 time=6 us)(object id 263)
    1 TABLE ACCESS BY INDEX ROWID IND$ (cr=3 pr=0 pw=0 time=8 us)
    1 INDEX UNIQUE SCAN I_IND1 (cr=2 pr=0 pw=0 time=5 us)(object id 39)
    0 TABLE ACCESS CLUSTER TS$ (cr=2 pr=0 pw=0 time=6 us)
    0 INDEX UNIQUE SCAN I_TS# (cr=2 pr=0 pw=0 time=4 us)(object id 7)
    1 INDEX UNIQUE SCAN I_OBJ1 (cr=3 pr=0 pw=0 time=7 us)(object id 36)
    0 NESTED LOOPS (cr=0 pr=0 pw=0 time=0 us)
    0 INDEX RANGE SCAN I_OBJAUTH1 (cr=0 pr=0 pw=0 time=0 us)(object id 103)
    0 FIXED TABLE FULL X$KZSRO (cr=0 pr=0 pw=0 time=0 us)
    0 FIXED TABLE FULL X$KZSPR (cr=0 pr=0 pw=0 time=0 us)
    SELECT nvl(sdo_index_partition, 'DEFAULT'), nvl(sdo_index_table, 'DEFAULT'),
    nvl(sdo_rtree_height,0), nvl(sdo_rtree_num_nodes,0),
    nvl(sdo_rtree_root,'EMPTY'), nvl(sdo_layer_gtype, 'DEFAULT'),
    nvl(sdo_index_status, 'VALID'), sdo_root_mbr
    FROM
    all_sdo_index_metadata WHERE sdo_index_owner='DAE_ADMIN' and sdo_index_name=
    'SECTORS_SX' and sdo_index_partition is not null ORDER BY
    sdo_index_partition
    call count cpu elapsed disk query current rows
    Parse 1 0.00 0.00 0 0 0 0
    Execute 1 0.00 0.00 0 0 0 0
    Fetch 2 0.00 0.00 0 45 0 2
    total 4 0.00 0.00 0 45 0 2
    Misses in library cache during parse: 0
    Optimizer mode: ALL_ROWS
    Parsing user id: 62 (recursive depth: 1)
    Rows Row Source Operation
    2 TABLE ACCESS BY INDEX ROWID SDO_INDEX_METADATA_TABLE (cr=45 pr=0 pw=0 time=155 us)
    2 INDEX RANGE SCAN SDO_IDX_MDATA_IDX (cr=43 pr=0 pw=0 time=142 us)(object id 48798)
    1 FILTER (cr=40 pr=0 pw=0 time=121 us)
    1 NESTED LOOPS OUTER (cr=40 pr=0 pw=0 time=118 us)
    1 NESTED LOOPS OUTER (cr=38 pr=0 pw=0 time=111 us)
    1 NESTED LOOPS OUTER (cr=34 pr=0 pw=0 time=100 us)
    1 NESTED LOOPS (cr=31 pr=0 pw=0 time=92 us)
    1 NESTED LOOPS (cr=22 pr=0 pw=0 time=78 us)
    1 NESTED LOOPS OUTER (cr=18 pr=0 pw=0 time=66 us)
    1 NESTED LOOPS (cr=15 pr=0 pw=0 time=56 us)
    3 NESTED LOOPS (cr=9 pr=0 pw=0 time=34 us)
    1 TABLE ACCESS BY INDEX ROWID USER$ (cr=2 pr=0 pw=0 time=6 us)
    1 INDEX UNIQUE SCAN I_USER1 (cr=1 pr=0 pw=0 time=4 us)(object id 44)
    3 TABLE ACCESS BY INDEX ROWID OBJ$ (cr=7 pr=0 pw=0 time=24 us)
    3 INDEX RANGE SCAN I_OBJ2 (cr=4 pr=0 pw=0 time=9 us)(object id 37)
    1 TABLE ACCESS BY INDEX ROWID IND$ (cr=6 pr=0 pw=0 time=20 us)
    1 INDEX UNIQUE SCAN I_IND1 (cr=5 pr=0 pw=0 time=12 us)(object id 39)
    1 TABLE ACCESS CLUSTER TS$ (cr=3 pr=0 pw=0 time=9 us)
    1 INDEX UNIQUE SCAN I_TS# (cr=2 pr=0 pw=0 time=4 us)(object id 7)
    1 TABLE ACCESS BY INDEX ROWID OBJ$ (cr=4 pr=0 pw=0 time=10 us)
    1 INDEX UNIQUE SCAN I_OBJ1 (cr=3 pr=0 pw=0 time=6 us)(object id 36)
    1 TABLE ACCESS CLUSTER USER$ (cr=9 pr=0 pw=0 time=13 us)
    1 INDEX UNIQUE SCAN I_USER# (cr=1 pr=0 pw=0 time=3 us)(object id 11)
    0 TABLE ACCESS CLUSTER SEG$ (cr=3 pr=0 pw=0 time=7 us)
    0 INDEX UNIQUE SCAN I_FILE#_BLOCK# (cr=3 pr=0 pw=0 time=6 us)(object id 9)
    1 TABLE ACCESS BY INDEX ROWID OBJ$ (cr=4 pr=0 pw=0 time=7 us)
    1 INDEX UNIQUE SCAN I_OBJ1 (cr=3 pr=0 pw=0 time=4 us)(object id 36)
    1 TABLE ACCESS CLUSTER USER$ (cr=2 pr=0 pw=0 time=6 us)
    1 INDEX UNIQUE SCAN I_USER# (cr=1 pr=0 pw=0 time=2 us)(object id 11)
    0 NESTED LOOPS (cr=0 pr=0 pw=0 time=0 us)
    0 INDEX RANGE SCAN I_OBJAUTH1 (cr=0 pr=0 pw=0 time=0 us)(object id 103)
    0 FIXED TABLE FULL X$KZSRO (cr=0 pr=0 pw=0 time=0 us)
    0 FIXED TABLE FULL X$KZSPR (cr=0 pr=0 pw=0 time=0 us)
    SELECT info
    from
    DAE_ADMIN.MDRT_1BFCC9$ where rowid = :rid
    call count cpu elapsed disk query current rows
    Parse 1 0.00 0.00 0 0 0 0
    Execute 1 0.00 0.00 0 0 0 0
    Fetch 1 0.00 0.00 0 1 0 1
    total 3 0.00 0.00 0 1 0 1
    Misses in library cache during parse: 0
    Optimizer mode: ALL_ROWS
    Parsing user id: 62 (recursive depth: 1)
    Rows Row Source Operation
    1 TABLE ACCESS BY USER ROWID MDRT_1BFCC9$ (cr=1 pr=0 pw=0 time=14 us)
    SELECT info
    from
    DAE_ADMIN.MDRT_1C72A2$ where rowid = :rid
    call count cpu elapsed disk query current rows
    Parse 2 0.00 0.00 0 0 0 0
    Execute 187 0.00 0.00 0 0 0 0
    Fetch 187 0.01 0.00 0 187 0 187
    total 376 0.01 0.00 0 187 0 187
    Misses in library cache during parse: 0
    Optimizer mode: ALL_ROWS
    Parsing user id: 62 (recursive depth: 1)
    OVERALL TOTALS FOR ALL NON-RECURSIVE STATEMENTS
    call count cpu elapsed disk query current rows
    Parse 3 0.00 0.00 0 0 0 0
    Execute 3 0.04 0.03 0 1173 0 2
    Fetch 569 1.20 1.25 0 71026 2 8512
    total 575 1.25 1.29 0 72199 2 8514
    Misses in library cache during parse: 1
    Misses in library cache during execute: 1
    OVERALL TOTALS FOR ALL RECURSIVE STATEMENTS
    call count cpu elapsed disk query current rows
    Parse 5128 0.01 0.03 0 0 0 0
    Execute 5314 0.04 0.05 0 0 0 3
    Fetch 5310 0.12 0.04 0 15703 0 5308
    total 15752 0.18 0.12 0 15703 0 5311
    Misses in library cache during parse: 0
    5123 user SQL statements in session.
    8 internal SQL statements in session.
    5131 SQL statements in session.
    Trace file: D:\oracle\product\10.2.0\admin\dae\udump\dae_ora_17004_sql2.trc
    Trace file compatibility: 10.01.00
    Sort options: default
    0 session in tracefile.
    5123 user SQL statements in trace file.
    8 internal SQL statements in trace file.
    5131 SQL statements in trace file.
    16 unique SQL statements in trace file.
    50973 lines in trace file.
    21 elapsed seconds in trace file.

Maybe you are looking for

  • ABC Analysis report -Inventory

    HI Has anyone created this kind of report in B1 . I came to know that this report is kind of standard report in most ERP. Can you please let me know how can i created that kind of report .I need to create that report as soon as possible so i  need  s

  • Passwords are not working on any sites?

    Hi I'm stressing........... For some reason my passwords are not working on anysites. I've tried about 4 or 5 different sites now all with different passwords. Does this mean there is some sort of malware installed somewhere? Thanks

  • My iPod keeps saying video playing through tv what does that mean?

    My iPod keeps saying video playing through tv what does that mean and how can I stop it?

  • [SOLVED]Can't get correct intel video support

    Hi there, I'm trying to get the intel video card of my Dell Latitude E5410 laptop working. I can't for example use the xv extension : xvinfo X-Video Extension version 2.2 screen #0 no adaptors presen here are some information of my config : uname -a

  • Directory console not showing entries ???

    Hello, I just migrated around 15,000 entries into iPlanet Directory through the Import button. They went in no problem, and I could view them through the console. I then removed them using an ldif and import. I wnet back to view the entries and I not