Statement of the type of cursor in package/sp

Hello
I use the package with sp than using slider as below:

--#1============================ PACKAGE
{THE PACKAGE AS ORA_PK_TR2
Type CURS_01 IS REF CURSOR;  -return RYBB. T_COLLECT % rowtype;
Procedure ORA_SP_CUST (present in date_exp,
END

--#2============================  BODY
create or replace
PACKAGE ORA_PK_TR2 BODY as
Procedure ORA_SP_CUST (present in date_exp,
open_CURS_01 OUT CURS_01) IS
BEGIN
SQL_string = "(select * de RYBB.)" T_COLLECT where col =' | DATE_EXP)"

Open_CURS_01 OPEN FOR SQL_STRING;

END;

-3 # = RUN_PORTION

DECLARE
DATE_EXP DATE;
OPEN_CURS_01 RYBB. ORA_PK_TR2. CURS_01;
TYPE_IN RYBB. T_COLLECT % ROWTYPE;       -/ * < = go to the package
BEGIN
Date_exp: = 10-seven.-10';
RYBB. ORA_PK_TR2. () ORA_SP_CUST
Date_exp = > date_exp.
OPEN_CURS_01 = > OPEN_CURS_01
);
LOOP
Look FOR open_CURS_01 IN TYPE_IN;
EXIT WHEN open_CURS_01% NOTFOUND;
DBMS_OUTPUT. PUT_LINE (TYPE_IN. COL1 | » '|| TYPE_IN. COL2);    -/ sample
END LOOP;
END ;}

I need to put TYPE_IN declation of cursor inside the packaging, so the user who will run this pack/sp deals with this structure. How I can do this,
I tried to use < return RYBB. T_COLLECT % rowtype; > in the package but then I get:
Error (122,6): PLS-00455: cursor 'open_CURS_01' cannot be used in a dynamic OPEN SQL statement.
Not sure I can somehow in the BODY and make it available to the user?

Help you enjoy.

Best
Trent

Published by: trento on 13 Sep, 2010 14:36

Hello

Slider strong Ref (with a return type) cannot be used with dynamic SQL
because the compiler cannot check dynamic SQL return type during compilation.
String ref cursor can be used only with static SQL.
Dynamic SQL can be used only with the low (untyped) cursor variables.

You can use static SQL in your procedure, look at this example:

create or replace
PACKAGE TEST AS
  TYPE CURS_01 IS REF CURSOR RETURN SCOTT.EMP%ROWTYPE;
  Procedure ORA_SP_CUST (EXP_DATE IN date, open_CURS_01 IN OUT CURS_01 );
END TEST;
/

CREATE OR REPLACE
PACKAGE BODY TEST AS

  PROCEDURE ORA_SP_CUST (EXP_DATE IN DATE, OPEN_CURS_01 IN OUT CURS_01 ) AS
  BEGIN
    OPEN OPEN_CURS_01 FOR
        SELECT * FROM SCOTT.EMP WHERE SCOTT.EMP.HIREDATE = EXP_DATE;
  END ORA_SP_CUST;

END TEST;
/

VARIABLE CR REFCURSOR;

BEGIN
   test.ORA_SP_CUST (TO_DATE('1981/12/03', 'yyyy/mm/dd'),
                     :cr );
END;
/

print :cr

CR
---------------------------------------------------------------------------------------------------------------------------------------------------------------
EMPNO                  ENAME      JOB       MGR                    HIREDATE                  SAL                    COMM                   DEPTNO
---------------------- ---------- --------- ---------------------- ------------------------- ---------------------- ---------------------- ----------------------
7900                   JAMES      CLERK     7698                   1981/12/03                950                                           30
7902                   FORD       ANALYST   7566                   1981/12/03                3000                                          20                     

Tags: Database

Similar Questions

  • call a procedure of package DB type complicated if the type defined in the package itself

    Hello world

    I use jdev 11.1.1.7.0

    I defined a package of data with a procedure and internal two types as follows:

    Create Or Replace Package Db_Package As 
    
    Type rec Is Record(Rec_Type Varchar2(10), Rec_Desc varchar2(10) );                        
    Type recordList Is Table Of rec;
    
    Procedure Test_Procedure(p_out out recordList);
    END db_package;
    
    
    

    evil

    I want to call this procedure in the module of the application. I know how to call a procedure or function db AM,

    but in this case that I've defined two types in the package itself and I use one of these types as to the procedure output parameter, I had a problem.

    below is the example of code to call the db procedure, but it does not work because the plsqlBlock.registerOutParameter () setting will not

            CallableStatement plsqlBlock = null;
            String statement = "Begin DB_PACKAGE.Test_Procedure(:1); END;";
            try {
                plsqlBlock = getDBTransaction().createCallableStatement(statement, 0);
                plsqlBlock.registerOutParameter(1, OracleTypes.ARRAY);// it doesn't work
                plsqlBlock.executeUpdate();
                Object object = plsqlBlock.getObject(1);      
    
    
            } catch (Exception e) {
                e.printStackTrace();
            }
    
    
    
    

    I know that if I set the types of packets (rec, recordList) as types of oracle (instead of setting in the packaging itself) so I can call the procedure with success, in this case I should use below:

    plsqlBlock.registerOutParameter(1, OracleTypes.ARRAY,"Recordlist");
    

    but I wonder how you can call a procedure from the package if the types defined in the package itself.

    Kind regards

    Habib

    JDBC supports the types of oracle level package only from 12 c database and jdbc driver ojdbc7 (which requires java 7).

    Dario

  • Possible bug found in hyperlinkctrl.c when you use the "VAL_POINTING_FINGER_CURSOR" mouse cursor in your own user interface.

    Hi people, I think I found a bug in the hyperlinkctrl.c custom control, after the update/upgrade an old project CVI.

    I found when I started using the "VAL_POINTING_FINGER_CURSOR" mouse in my UI, when adding a new hyperlink control.

    The error is recoverable error: ' from the mouse cursor is not valid.

    This error breaks in RunUserInterface (never seen anything like this before and I use CVI since version 3.1).

    This happens whenever I mouse - hovering anywhere on the Panel that contains the new hyperlink control.

    I also had a hack temporary to solve the problem, for now, I'll pass it along to this announcement...

    The hyperlink control's source code is located in \toolslib\custctrl\hyperlinkctrl.c

    The bug/problem lies in the service of reminder (of HyperLinkPanelCallback), specifically in lines 460 to 465.

    This hyperlink control wants to use the VAL_POINTING_FINGER_CURSOR as its default cursor when you hover over the custom hyperlink.

    However, if you already use 'VAL_POINTING_FINGER_CURSOR' in your user interface, the branch which verifies that you use what he thinks is 'his own' thread-safe mouse cursor ID, so that can reset it by using his "token concatenation" - created macro "GetTsvCursor", is not an 'else' branch to protect the picture when you actually use the cursor pointing finger... where the error that the mouse cursor is not valid. Here is the snippet of these lines.

    The mouse is not over a hyperlink
    If (cursor is VAL_POINTING_FINGER_CURSOR)
    {
    Reset the cursor to the previous cached cursor
    cursor = GetTsvCursor();
    errChk (SetMouseCursor (cursor));

    ... etc...

    }

    So my hack was to change the type of cursor to "VAL_CHECK_CURSOR" in place and place the cursor of "VAL_POINTING_FINGER_CURSOR" in three locations in this function, then rebuilt files x 86 and x 64.

    Hey Luis, finally win a free T-shirt of LabWindows/CVI with not only have reported this bug, but also to give the precise location of the source, as well as a work around?

    :^)

    JB

    In the meantime, I have submitted a bug with ID #545203 report to track down this problem.

    -Johannes

  • ORA-04068: current state of the packages was waived - avoid

    Hello
    I fight with the bad behavior of developers that is, something like this:
    CREATE OR REPLACE PACKAGE pkg1 IS
    
    g_version VARCHAR2(20) := '7.3';
        TYPE t_id_kon IS RECORD(
        id_kon VARCHAR2(12),
        sr_id    NUMBER(5));
    
      TYPE t_id_kont IS TABLE OF t_id_kon INDEX BY BINARY_INTEGER;
      FUNCTION get_version RETURN VARCHAR2;
    END pkg1;
    /
    I did some tests and looks like when you recompile pkg1 with
    Global g_version variable it is ORA-04068 generated for all sessions using this pkg1 before recompiling.
    But what about type and table_type declared in pkg1 they cause same behavior as g_version global varialbe?

    And generally how to treat than the types of situations of application point of view, you must catch this exception and re-run your application just?
    concerning
    GregG

    Packages tend to fail because of their 'package '. A package has a 'State' when it contains the package variable and constant level etc. and the package is called. On the first calling package, the 'State' is created in memory to hold the values of these variables, etc. If an object including the package depends on for example a table is changed somehow example deleted and recreated due to data dependencies, the package then takes a State not VALID. When you do then appealed to the package, Oracle examines the status and see that it is not valid, then determines that the package has a "State". Because something changed the package depended on, the State is taken as being obsolete and is ignored, which causes the error "State package has been abandoned" message.

    If a package has no variables of level package etc. i.e. the 'State' and then, taking the same example above, the whole takes an INVALID state, but when you make then a call to the package, Oracle considers as invalid, but knows that there is no 'State' attached to it and is therefore able to recompile the package automatically and then continue execution without causing error messages. The only exception here is if the thing that the package was dependent on a change of such kind that the package may not compile, in which case you will get an invalid error package type.

    And if you want to know how we prevent Jetty package States...

    Move all variables and constants in a stand-alone package specification and to refer to those of your original package. So when the status of your original packing is invlidated for some reason, it has no State package and can be recompiled automatically, however the packaging containing the vars/const is not cancelled because it has no dependencies, so the State that is in memory for this package will remain and may continue to be used.

    As for package-level sliders, you will need to make these premises to the procedures/functions using them as you won't be able of sliders reference in all of packages like that (not sure on the use of the REF CURSOR but... exists for me to study!)

    This first example shows the State being disabled by adding a new column on the table and causing to give a 'Package State scrapped' error...

    SQL> set serveroutput on
    SQL>
    SQL> create table dependonme (x number)
      2  / 
    
    Table created.
    
    SQL>
    SQL> insert into dependonme values (5)
      2  / 
    
    1 row created.
    
    SQL>
    SQL> create or replace package mypkg is
      2    procedure myproc;
      3  end mypkg;
      4  / 
    
    Package created.
    
    SQL>
    SQL> create or replace package body mypkg is
      2    v_statevar number := 5; -- this means my package has a state
      3
      4    procedure myproc is
      5      myval number;
      6    begin
      7      select x
      8      into myval
      9      from dependonme;
     10
     11      myval := myval * v_statevar;
     12      DBMS_OUTPUT.PUT_LINE('My Result is: '||myval);
     13    end;
     14  end mypkg;
     15  / 
    
    Package body created.
    
    SQL>
    SQL> exec mypkg.myproc
    My Result is: 25
    
    PL/SQL procedure successfully completed.
    
    SQL>
    SQL> select object_name, object_type, status from user_objects where object_name = 'MYPKG'
      2  / 
    
    OBJECT_NAME
    --------------------------------------------------------------------------------------------------
    OBJECT_TYPE         STATUS
    ------------------- -------
    MYPKG
    PACKAGE             VALID
    
    MYPKG
    PACKAGE BODY        VALID
    
    SQL>
    SQL>
    SQL> alter table dependonme add (y number)
      2  / 
    
    Table altered.
    
    SQL>
    SQL> select object_name, object_type, status from user_objects where object_name = 'MYPKG'
      2  / 
    
    OBJECT_NAME
    --------------------------------------------------------------------------------------------------
    OBJECT_TYPE         STATUS
    ------------------- -------
    MYPKG
    PACKAGE             VALID
    
    MYPKG
    PACKAGE BODY        INVALID
    
    SQL>
    SQL> exec mypkg.myproc
    BEGIN mypkg.myproc; END;
    
    *
    ERROR at line 1:
    ORA-04068: existing state of packages has been discarded
    ORA-04061: existing state of package body "SCOTT.MYPKG" has been invalidated
    ORA-06508: PL/SQL: could not find program unit being called: "SCOTT.MYPKG"
    ORA-06512: at line 1
    
    SQL>
    SQL> select object_name, object_type, status from user_objects where object_name = 'MYPKG'
      2  / 
    
    OBJECT_NAME
    --------------------------------------------------------------------------------------------------
    OBJECT_TYPE         STATUS
    ------------------- -------
    MYPKG
    PACKAGE             VALID
    
    MYPKG
    PACKAGE BODY        INVALID
    
    SQL>
    SQL> exec mypkg.myproc
    
    PL/SQL procedure successfully completed.
    
    SQL>
    SQL> select object_name, object_type, status from user_objects where object_name = 'MYPKG'
      2  / 
    
    OBJECT_NAME
    --------------------------------------------------------------------------------------------------
    OBJECT_TYPE         STATUS
    ------------------- -------
    MYPKG
    PACKAGE             VALID
    
    MYPKG
    PACKAGE BODY        VALID
    

    And the following example shows how to get the package in their own specifications of package variables, allows the package to automatically recompile when it is called even if it has become invalid by the action to add a column to the table.

    SQL> drop table dependonme
      2  / 
    
    Table dropped.
    
    SQL>
    SQL> drop package mypkg
      2  / 
    
    Package dropped.
    
    SQL>
    SQL> set serveroutput on
    SQL>
    SQL> create table dependonme (x number)
      2  / 
    
    Table created.
    
    SQL>
    SQL> insert into dependonme values (5)
      2  / 
    
    1 row created.
    
    SQL>
    SQL> create or replace package mypkg is
      2    procedure myproc;
      3  end mypkg;
      4  / 
    
    Package created.
    
    SQL>
    SQL> create or replace package mypkg_state is
      2    v_statevar number := 5; -- package state in seperate package spec
      3  end mypkg_state;
      4  / 
    
    Package created.
    
    SQL>
    SQL> create or replace package body mypkg is
      2    -- this package has no state area
      3
      4    procedure myproc is
      5      myval number;
      6    begin
      7      select x
      8      into myval
      9      from dependonme;
     10
     11      myval := myval * mypkg_state.v_statevar;  -- note: references the mypkg_state package
     12      DBMS_OUTPUT.PUT_LINE('My Result is: '||myval);
     13    end;
     14  end mypkg;
     15  / 
    
    Package body created.
    
    SQL>
    SQL> exec mypkg.myproc
    My Result is: 25
    
    PL/SQL procedure successfully completed.
    
    SQL>
    SQL> select object_name, object_type, status from user_objects where object_name = 'MYPKG'
      2  / 
    
    OBJECT_NAME
    --------------------------------------------------------------------------------------------------
    OBJECT_TYPE         STATUS
    ------------------- -------
    MYPKG
    PACKAGE             VALID
    
    MYPKG
    PACKAGE BODY        VALID
    
    SQL>
    SQL> alter table dependonme add (y number)
      2  / 
    
    Table altered.
    
    SQL>
    SQL> select object_name, object_type, status from user_objects where object_name = 'MYPKG'
      2  / 
    
    OBJECT_NAME
    --------------------------------------------------------------------------------------------------
    OBJECT_TYPE         STATUS
    ------------------- -------
    MYPKG
    PACKAGE             VALID
    
    MYPKG
    PACKAGE BODY        INVALID
    
    SQL>
    SQL> exec mypkg.myproc
    My Result is: 25
    
    PL/SQL procedure successfully completed.
    
  • error ORA-4068:-l' current state of the package is invalidated

    Hai friends,

    Please see this link

    Problem we faced, it is ' error ora-4068:-l' current state of the package is disabled "in the application.initiallly of customer, we migrated to oracle 9i and 10g 10.2.0.4.0

    We have discussed and obtained the solution as the timestamp of the objects may be different. (we expect the access rights of the table sys.obj$) pls see the link

    Re: oracle error-4068

    But now we are informed senior as below

    (1) error ora-4068 will come only when recompile us the view. is this true?

    (2) 6136074 bug is fixed in 10.2.0.4.0. is it?

    Gurus of give your valuable suggestions

    S

    Packages tend to fail because of their 'package '. A package has a 'State' when it contains the package variable and constant level etc. and the package is called. On the first calling package, the 'State' is created in memory to hold the values of these variables, etc. If an object including the package depends on for example a table is changed somehow example deleted and recreated due to data dependencies, the package then takes a State not VALID. When you do then appealed to the package, Oracle examines the status and see that it is not valid, then determines that the package has a "State". Because something changed the package depended on, the State is taken as being obsolete and is ignored, which causes the error "State package has been abandoned" message.

    If a package has no variables of level package etc. i.e. the 'State' and then, taking the same example above, the whole takes an INVALID state, but when you make then a call to the package, Oracle considers as invalid, but knows that there is no 'State' attached to it and is therefore able to recompile the package automatically and then continue execution without causing error messages. The only exception here is if the thing that the package was dependent on a change of such kind that the package may not compile, in which case you will get an invalid error package type.

    And if you want to know how we prevent Jetty package States...

    Move all variables and constants in a stand-alone package specification and to refer to those of your original package. So when the status of your original packing is invlidated for some reason, it has no State package and can be recompiled automatically, however the packaging containing the vars/const is not cancelled because it has no dependencies, so the State that is in memory for this package will remain and may continue to be used.

    As for package-level sliders, you will need to make these premises to the procedures/functions using them as you won't be able of sliders reference in all of packages like that (not sure on the use of the REF CURSOR but... exists for me to study!)

    This first example shows the State being disabled by adding a new column on the table and causing to give a 'Package State scrapped' error...

    SQL> set serveroutput on
    SQL>
    SQL> create table dependonme (x number)
      2  / 
    
    Table created.
    
    SQL>
    SQL> insert into dependonme values (5)
      2  / 
    
    1 row created.
    
    SQL>
    SQL> create or replace package mypkg is
      2    procedure myproc;
      3  end mypkg;
      4  / 
    
    Package created.
    
    SQL>
    SQL> create or replace package body mypkg is
      2    v_statevar number := 5; -- this means my package has a state
      3
      4    procedure myproc is
      5      myval number;
      6    begin
      7      select x
      8      into myval
      9      from dependonme;
     10
     11      myval := myval * v_statevar;
     12      DBMS_OUTPUT.PUT_LINE('My Result is: '||myval);
     13    end;
     14  end mypkg;
     15  / 
    
    Package body created.
    
    SQL>
    SQL> exec mypkg.myproc
    My Result is: 25
    
    PL/SQL procedure successfully completed.
    
    SQL>
    SQL> select object_name, object_type, status from user_objects where object_name = 'MYPKG'
      2  / 
    
    OBJECT_NAME
    --------------------------------------------------------------------------------------------------
    OBJECT_TYPE         STATUS
    ------------------- -------
    MYPKG
    PACKAGE             VALID
    
    MYPKG
    PACKAGE BODY        VALID
    
    SQL>
    SQL>
    SQL> alter table dependonme add (y number)
      2  / 
    
    Table altered.
    
    SQL>
    SQL> select object_name, object_type, status from user_objects where object_name = 'MYPKG'
      2  / 
    
    OBJECT_NAME
    --------------------------------------------------------------------------------------------------
    OBJECT_TYPE         STATUS
    ------------------- -------
    MYPKG
    PACKAGE             VALID
    
    MYPKG
    PACKAGE BODY        INVALID
    
    SQL>
    SQL> exec mypkg.myproc
    BEGIN mypkg.myproc; END;
    
    *
    ERROR at line 1:
    ORA-04068: existing state of packages has been discarded
    ORA-04061: existing state of package body "SCOTT.MYPKG" has been invalidated
    ORA-06508: PL/SQL: could not find program unit being called: "SCOTT.MYPKG"
    ORA-06512: at line 1
    
    SQL>
    SQL> select object_name, object_type, status from user_objects where object_name = 'MYPKG'
      2  / 
    
    OBJECT_NAME
    --------------------------------------------------------------------------------------------------
    OBJECT_TYPE         STATUS
    ------------------- -------
    MYPKG
    PACKAGE             VALID
    
    MYPKG
    PACKAGE BODY        INVALID
    
    SQL>
    SQL> exec mypkg.myproc
    
    PL/SQL procedure successfully completed.
    
    SQL>
    SQL> select object_name, object_type, status from user_objects where object_name = 'MYPKG'
      2  / 
    
    OBJECT_NAME
    --------------------------------------------------------------------------------------------------
    OBJECT_TYPE         STATUS
    ------------------- -------
    MYPKG
    PACKAGE             VALID
    
    MYPKG
    PACKAGE BODY        VALID
    

    And the following example shows how to get the package in their own specifications of package variables, allows the package to automatically recompile when it is called even if it has become invalid by the action to add a column to the table.

    SQL> drop table dependonme
      2  / 
    
    Table dropped.
    
    SQL>
    SQL> drop package mypkg
      2  / 
    
    Package dropped.
    
    SQL>
    SQL> set serveroutput on
    SQL>
    SQL> create table dependonme (x number)
      2  / 
    
    Table created.
    
    SQL>
    SQL> insert into dependonme values (5)
      2  / 
    
    1 row created.
    
    SQL>
    SQL> create or replace package mypkg is
      2    procedure myproc;
      3  end mypkg;
      4  / 
    
    Package created.
    
    SQL>
    SQL> create or replace package mypkg_state is
      2    v_statevar number := 5; -- package state in seperate package spec
      3  end mypkg_state;
      4  / 
    
    Package created.
    
    SQL>
    SQL> create or replace package body mypkg is
      2    -- this package has no state area
      3
      4    procedure myproc is
      5      myval number;
      6    begin
      7      select x
      8      into myval
      9      from dependonme;
     10
     11      myval := myval * mypkg_state.v_statevar;  -- note: references the mypkg_state package
     12      DBMS_OUTPUT.PUT_LINE('My Result is: '||myval);
     13    end;
     14  end mypkg;
     15  / 
    
    Package body created.
    
    SQL>
    SQL> exec mypkg.myproc
    My Result is: 25
    
    PL/SQL procedure successfully completed.
    
    SQL>
    SQL> select object_name, object_type, status from user_objects where object_name = 'MYPKG'
      2  / 
    
    OBJECT_NAME
    --------------------------------------------------------------------------------------------------
    OBJECT_TYPE         STATUS
    ------------------- -------
    MYPKG
    PACKAGE             VALID
    
    MYPKG
    PACKAGE BODY        VALID
    
    SQL>
    SQL> alter table dependonme add (y number)
      2  / 
    
    Table altered.
    
    SQL>
    SQL> select object_name, object_type, status from user_objects where object_name = 'MYPKG'
      2  / 
    
    OBJECT_NAME
    --------------------------------------------------------------------------------------------------
    OBJECT_TYPE         STATUS
    ------------------- -------
    MYPKG
    PACKAGE             VALID
    
    MYPKG
    PACKAGE BODY        INVALID
    
    SQL>
    SQL> exec mypkg.myproc
    My Result is: 25
    
    PL/SQL procedure successfully completed.
    
  • Casting table PL/SQL for the type of existing table and back ref cursor

    Hello



    I have the problem of casting a pl/sql table for the type of an existing table and turning the ref cursor to the application. Casting a ref cursor back and number of pl/sql table works well.



    Declarant

    < strong > TYPE type_table_name IS TABLE OF THE package_name.table_name%ROWTYPE; < facilities >

    within the stored procedure, fill in a table of this type temp_table_name and returning the ref cursor help

    < strong > results OPEN to SELECT * FROM TABLE (CAST (temp_table_name AS type_table_name)); < facilities >

    generates an error. type_table_name is unknown in this distribution. According to me, this happens because of the declaration of the type locally.



    Statement type_table_name inside the package specification does not work neither. Incredible, cast to the said dbms_sql.number_table to specify ref cursor back and dbms_sql package works very well!



    < strong > CREATE TYPE type_table_name IS TABLE OF THE package_name.table_name%ROWTYPE; < facilities > deals without any error but creates an invalid type complain a reference to package_name.table_name



    I don't want to declare every column in the table in type_table_name, because any change the table_name table would result in an inconsistent type_table_name.



    Thanks in advance!

    Edited by: user6014545 the 20.10.2008 01:04

    In any case you are right that there is a problem around anchorage (or maintaining) types of objects persistent to match the table structures, they may represent.

    In the case you describe, you might be better off just open the refcursor immediately the using one of the techniques described in the http://www.williamrobertson.net/documents/comma-separated.html to manage the delimited list.

    In the more general case where the line of treatment is necessary, you may make the pipeline functions.

    Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production
    
    SQL> CREATE TABLE table_name
      2  AS
      3     SELECT ename column_name
      4     FROM   emps;
    
    Table created.
    
    SQL> CREATE OR REPLACE PACKAGE package_name
      2  AS
      3     TYPE type_name IS TABLE OF table_name%ROWTYPE;
      4
      5     FUNCTION function_name_pipelined (
      6        parameter_name IN VARCHAR2)
      7        RETURN type_name PIPELINED;
      8
      9     FUNCTION function_name_refcursor (
     10        parameter_name IN VARCHAR2)
     11        RETURN sys_refcursor;
     12  END package_name;
     13  /
    
    Package created.
    
    SQL> CREATE OR REPLACE PACKAGE BODY package_name
      2  AS
      3     FUNCTION function_name_pipelined (
      4        parameter_name IN VARCHAR2)
      5        RETURN type_name PIPELINED
      6     IS
      7     BEGIN
      8        FOR record_name IN (
      9           SELECT table_alias.*
     10           FROM   table_name table_alias
     11           WHERE  table_alias.column_name LIKE parameter_name) LOOP
     12
     13           PIPE ROW (record_name);
     14        END LOOP;
     15
     16        RETURN;
     17     END function_name_pipelined;
     18
     19     FUNCTION function_name_refcursor (
     20        parameter_name IN VARCHAR2)
     21        RETURN sys_refcursor
     22     IS
     23        variable_name sys_refcursor;
     24     BEGIN
     25        OPEN variable_name FOR
     26           SELECT table_alias.*
     27           FROM   TABLE (package_name.function_name_pipelined (
     28                     parameter_name)) table_alias;
     29
     30        RETURN variable_name;
     31     END function_name_refcursor;
     32  END package_name;
     33  /
    
    Package body created.
    
    SQL> VARIABLE variable_name REFCURSOR;
    SQL> SET AUTOPRINT ON;
    SQL> BEGIN
      2     :variable_name := package_name.function_name_refcursor ('%A%');
      3  END;
      4  /
    
    PL/SQL procedure successfully completed.
    
    COLUMN_NAME
    -----------
    ALLEN
    WARD
    MARTIN
    BLAKE
    CLARK
    ADAMS
    JAMES
    
    7 rows selected.
    
    SQL> ALTER TABLE table_name ADD (new_column_name VARCHAR2 (1) DEFAULT 'X');
    
    Table altered.
    
    SQL> BEGIN
      2     :variable_name := package_name.function_name_refcursor ('%A%');
      3  END;
      4  /
    
    PL/SQL procedure successfully completed.
    
    COLUMN_NAME NEW_COLUMN_NAME
    ----------- ---------------
    ALLEN       X
    WARD        X
    MARTIN      X
    BLAKE       X
    CLARK       X
    ADAMS       X
    JAMES       X
    
    7 rows selected.
    
    SQL>
    
  • Get the types of columns in a select statement

    Hello

    Is there a way to get the types of columns that results in a select statement?

    For example to force an analysis on this topic and then look for the types of columns resulting in the view v$?

    Best regards

    Klaus Mogensen

    declare
      c       number;
      d       number;
      col_cnt integer;
      rec_tab dbms_sql.desc_tab;
      col_num number;
    begin
      c := dbms_sql.open_cursor;
      dbms_sql.parse(c, 'select dummy, 33 x, sysdate now from dual', dbms_sql.native);
      dbms_sql.describe_columns(c, col_cnt, rec_tab);
      col_num := rec_tab.first;
      while col_num is not null
      loop
        dbms_output.put_line( rec_tab(col_num).col_name || ' ' ||
                              case rec_tab(col_num).col_type
                                when 1 then 'varchar2'
                                when 2 then 'number'
                                when 12 then 'date'
                                else '???? ' || rec_tab(col_num).col_type
                              end
                            );
        col_num := rec_tab.next(col_num);
      end loop;
      dbms_sql.close_cursor(c);
    end;
    /
    DUMMY varchar2
    X number
    NOW date
    
  • How to get information about the types within a user defined package

    Hi all
    Have a package with some types (user-defined) defined in the package specification. How to get information about the types and
    information about the columns of this type.

    for example:
    Create package mp is

    type t is record (no number is varchar2 (30));

    procedure a (m t out...

    Thanks in advance.

    userg

    G_user wrote:
    the req's, want to build a script dynamically using data dictionary
    so if possible, I take the name of the type within the package specification.

    Let me rephrase - is there a data dictionary to get information on the type defined by the user within a package specification

    Best approach will be to have a standard in the definition of data types.

    Have a process to follow the object definitions in the package if it is mandatory.

  • Statement of the object as the type

    Hello

    I just discovered a very basic thing on the statements of the subject and references after half a year of learning:
    It does not compile:
    Object o = new Dog(); 
    o.grrrr(); 
    Could someone point me to an article where it is explained in detail?

    I'm in the dark here, but I try a few questions:
    -What can and cannot be done with a typed object reference as an ancestor of the class of the object, it refers?
    -What are the advantages and disadvantages of do?
    -J' tried with an interface as type and I can't use the fields for the object being referenced there either, so this will only make good reference to all the?

    -I don't see why we can declare an object such as an interface type or ancestor if ultimately we cannot use this reference to reach the fields of the object.
    It is only in that way we can iterate over objects whose type can vary? But even in this case, we cannot use the fields throughout the iteration.

    Thank you very much in advance for any commments on this.

    lemonboston wrote:
    Hello

    I just discovered a very basic thing on the statements of the subject and references after half a year of learning:
    It does not compile:

    Object o = new Dog();
    o.grrrr(); 
    

    Could someone point me to an article where it is explained in detail?

    Varialbe o type is reference-object. Which is determined by the object o, at compile time. That's all the compiler cares when decide how o may be used.

    I'm in the dark here, but I try a few questions:
    -What can and cannot be done with a typed object reference as an ancestor of the class of the object, it refers?

    You can use a reference in a way that is consistent with its type of compilation. Note that you can get o the dog and then use the reference obtained as a reference-to-dog expression, but you generally won't go up if you don't have to.

    -What are the advantages and disadvantages of do?
    -J' tried with an interface as type and I can't use the fields for the object being referenced there either, so this will only make good reference to all the?

    Glasses for the coding of the interface. The general idea is, roughly speaking, 'all I care is that I have the list. I don't like which particular implementation of list is (ArrayList, LinkedList, etc.), so he does these things that promises to the interface of the to do list. The details of how it does are not important to me. "This gives you the flexibility and, for example, allows the provider from the list on the RIGHT side of the = to give you different implementations according to what is appropriate at this time here during execution.

    -I don't see why we can declare an object such as an interface type or ancestor if ultimately we cannot use this reference to reach the fields of the object.

    Each object of dog IS - YEAR and each ArrayList IS - A list and IS - AN object and Collection of IS - A, etc. Google for oriented object is a relationship and the liskov substitution principle

    This is really more general stuff OO Java stuff, even if of course Java, like other OO languages, has its own details as to how it supports these concepts.

  • to find the number of records retrieved in the select statement in the cursor

    Hi all
    with the cursor, I'm selecting select statement together and writing in the .txt file.
    his worksheet, but it should not open the file, if the cursor returns nothing.
    How to find the number of records returned by the select statement in the cursor.
    pls help me.

    Thank you...

    Don't understand what you're trying to say, but maybe it's...

    DECLARE
       vCounter NUMBER;
       -- Other variables...
    BEGIN
       vCounter:=0;
       FOR .. IN cursor LOOP
        IF vCounter=0 THEN
          -- Here open file...
          -- Here write one time data...
        END IF;
        -- Here write cursor data...
        vCounter:=1;
       END LOOP;
    END;
    

    -Clément

  • Get the error PLS-00103 while specifying the Type of package

    Hey bud,
    All by specifying a Type which is the table of a different type, in the same package, I get an error in my PL Sql Developer, saying:


    Errors of compilation for the OASIS_TST PACKAGE. PK_OA
    Error: PLS-00103: encountered the symbol "TABLE" when awaits one of the following values:
    opaque object
    Line: 61
    Text: as a table of tp_report;

    Here are the specs of my package where the respective Types are declared:

    ************************************************************************
    create or replace package pk_oa
    is
    function (report)
    as in pd_date)
    return tp_tab in pipeline;

    type tp_report
    as an object
    *(*
    ID INT,
    last_nm VARCHAR2 (50).
    first_nm VARCHAR2 (50).
    full_nm VARCHAR2 (50));

    type tp_tab
    as the table of tp_report;

    end;
    **************************************************************
    Could you find where I'm wrong with this piece.
    Thank you

    HP

    You must create types of objects outside packages:

    SQL> create or replace type tp_report
      2  as object(
      3     id INT,
      4     last_nm VARCHAR2(50),
      5     first_nm VARCHAR2(50),
      6     full_nm VARCHAR2(50));
      7  /
    
    Typ wurde erstellt.
    
    SQL> create or replace package pk_oa
      2  is
      3
      4  type tp_tab
      5  is table of tp_report;
      6
      7  function report (
      8  pd_date in date)
      9  return tp_tab pipelined;
     10
     11  end;
     12  /
    
    Package wurde erstellt.
    

    URS

  • How to use the Type of Oracle Table values in the Select statement.

    Hello

    I get the initial set of values in the Table of Type Records of the Oracle and want to use the list of values in the Select statement.

    For example, try something like the following:

    TYPE t_record () IS RENDERING
    ID TABLEA.ID%type,
    NO TABLEA.NO%type

    );
    v_record t_record;
    T_table TYPE IS the v_record TABLE % TYPE;
    v_table t_table;

    -Code to fill the values of v_table here.

    SELECT ID, NO, COLLECT in BULK IN < some other table variabes here > FROM TABLEA
    WHERE ID IN (i) v_table USER.USER;

    I want to know how to use the Type of Oracle Table values in the Select statement.

    Something like this:

    create or replace type t_record as  object (
    id number,
    no number
    )
    /
    
    CREATE or replace type t_table AS TABLE OF t_record;
    /
    
    set serveroutput on
    declare
    
      v_table t_table := t_table();
      v_t1 t_table := t_table();
    
    begin
    
      v_table.extend(1);
      v_table(1).ID := 1;
      v_table(1).No := 10;
    
      v_table.extend(1);
      v_table(2).ID := 2;
      v_table(2).ID := 20;
    
      SELEC t_record (ID,NO) BULK COLLECT INTO v_t1
      from TableA
      FROM TABLEA
      WHERE ID IN (select t.ID from table(v_Table) t);
    
      for i in 1..v_t1.count loop
        dbms_output.put_line(v_t1(i).ID);
        dbms_output.put_line(v_t1(i).No);
      end loop;
    end;
    /
    

    No test!

    P;

    Published by: bluefrog on March 5, 2010 17:08

  • to access the public jdbc package types and the length of the type name

    is it possible to use a jdbc type defined in a package in the public (in the header defined and body of course)

    For example
    user applications
    package hxc_self_service_time_deposit
    type app_attributes_info

    Can I use apps.hxc_self_service_time_deposit.app_attributes_info?
    for example:
    ArrayDescriptor arrayDescriptorAttributes = (ArrayDescriptor) (conn) .getDescriptor ("apps.hxc_self_service_time_deposit.app_attributes_info") (OracleConnection);
    If (arrayDescriptorAttributes == null) {}
    System.out.println ("creating array descriptor");
    arrayDescriptorAttributes = ArrayDescriptor.createDescriptor ("apps.hxc_self_service_time_deposit.app_attributes_info", conn);
    }

    That said, that the name of the type is not valid also if I leave aside applications, same thing.

    I could define the type myself, but then this pause by using the Api E - BS, and that of the whole point of the task, check if you can use the api of E - BS JDBC.
    : p seams do not make for jdbc callls unless change you the database

    Hello

    No, you can't do it. getDescriptor is looking for a structured object SQL. (It's a SQL object type)

    Apps.hxc_self_service_time_deposit.app_attributes_info is a type of PL/SQL and SQL can be used:

    SQL>create or replace package hxc_self_service_time_deposit
      2  is
      3     type app_attributes_info is record (x number);
      4
      5     function f
      6        return app_attributes_info;
      7  end hxc_self_service_time_deposit;
      8  /
    
    Package created.
    
    SQL>
    SQL>select hxc_self_service_time_deposit.f from dual;
    select hxc_self_service_time_deposit.f from dual
           *
    ERROR at line 1:
    ORA-00902: invalid datatype
    

    Concerning
    Peter

  • REP-0737: must be a function of return type 'ref cursor.

    Hi all

    I have create a ref cursor query in reports 10 g. But it is giving error REP-0737: must be a function of return type 'ref cursor.

    Here is my code

    function QR_1RefCurDS return sys_refcursor is
    
     My_Cur Sys_Refcursor;
    begin
      Open My_Cur for select * from scott.emp order by deptno;
      return My_Cur
    end;
    

    fate of the screen.

    Ref_Cursor_in_reports10g.jpg

    Oracle Forms/Reports has a complete PL/SQL engine and (only) the SQL parser.

    However, the engine of forms/States PL / SQL and SQL Analyzer are at a level that was in the Oracle 8.0 database.

    So, in the forms/States functions/procedures and forms/States triggers, you can not use SQL commands that did not exist in the 8.0 database.

    The predefined SYS_REFCURSOR type is introduced in Oracle 9i.

    Use this:

    PACKAGE test_rc IS

    TYPE of rc_type IS REF CURSOR RETURN emp % ROWTYPE;

    END;

    FUNCTION RETURN QR_1RefCurDS Test_rc.rc_type IS

    test_rc.rc_type RC;

    BEGIN

    OPEN the RC to SELECT * FROM emp;

    RETURN rc;

    END;

    Kind regards

    Zlatko

  • Not able to get the value of the type defined in the other program

    Hi all

    I have create a type in a single package spec (Globally), now I'm using the same type in another package. Simply I'm calling the first package and try to store the value in the Type and use the same type in the second package.

    But I'm not able to get the value

    Type declaration

    Declared in package Spec
    
    TYPE t_aa_derive_tbl_type IS TABLE OF xxxx%ROWTYPE;
       t_aa_derive t_aa_derive_tbl_type;
    

    Package 1

    Package1. PROCEDURE name(
    some parameters);
    is
    Cursor
    c1 is Select * from dual;
    
    begin
          OPEN c_aa_derive;
            FETCH c_aa_derive
            BULK COLLECT INTO t_aa_derive;
            CLOSE c_aa_derive;
           
         END get_aa_derive;
    

    In my second package

    I'll call you

    Package1. PROCEDURE name(
    some parameters);
    
    and then i am trying to
    
    for i in 1 .. package1.t_aa_derive.COUNT
      LOOP
    
    ....
    
    ....
    ...
    
    end loop;
    

    I can not entered the loop for some reason any.

    Could someone guide me if anything I missed.

    See you soon,.

    San

    And what did you like refcursor c_aa_derive in the call to package1.name? Is it returns all rows? If this isn't the case, COUNT will be 0.

    SY.

Maybe you are looking for

  • 5 alley, 2.4 ghz still work?

    I have a Time Capsule 2 GB race at the beginning of 2009 7.6.7. He was a soldier for many years and saved my bacon at least once. Now he won't pass on 2.4 ghz more. He thinks he does, I can select a channel or let him; It reports no errors. But no de

  • How to move my pc to bookmarks tab without synchronization?

    tab is android, I the .json file, but there is no import option in firefox

  • HP Envy 5530: scanning

    When I scan a drawing color - "BOLD" part, a part of light, the preview shows everything correctly - scanning final analysis only the "BOLD", the light point is "split into several images in black and white, even when parsing as 'photo'. If scanned i

  • Device Manager - no information screen

    When I put it up the Device Manager I don't get any information about the devices in my HP laptop. The computer is running Windows XP Home. I tried many patches offered on the internet. It seems that I need to install Windows, but HP did not provide

  • Cannot reinstall Outlook because I lost the password

    I try reinstalling outlook because I lost my password can help I've been in the pc world and they said they could do nothing to help make problems?