Function scope in Package  PLS-00231:

In my package body, one local function_A is calling local function_B. Since both functions will not be called outside of the package (function_A will be called by a public procedure, which is defined in the package spec), I did not want to define A and B in my Package spec. However, when I compile the body, I get the following error message:
Error(46,30): PLS-00231: function 'FUNCTION_B' may not be used in SQL
If I add function_B to my package spec (even though it is not public), the error message will go away.
Does anybody knows why?
Thanks.

The error message appears to indicate that function_B is being called in a SQL/DML statement:
select function_B(n) from...
If this is the case, and is necessary (i.e. it's not a pointless query select function_B(n) from dual) then function_B must be declared publically in the package spec as the SQL engine - and hence any SQL or DML statement - is outside the scope of the package, regardless of whether the only SQL calling it is in the package or not.
Note that this forum is for discussion of the Oracle SQL Developer development tool. General PL/SQL queries such as this are better dealt with on the PL/SQL.

Similar Messages

  • Function may not be use in SQL - PLS-00231

    Here is my code,
    -- Database 10g Enterprise Edition Release 10.2.0.2.0
    declare
    v1 varchar2(2000);
    function test_func ( v2 varchar2) return varchar2
    is
    begin
    return v2 || 'x' || v2;
    end;
    begin
    -- ok
    v1 := test_func('Hello');
    --- Error PLS-00231: Function may not be used
    --insert into xxxx values test_func(….
    select test_func('World') into v1 from dual;
    end;
    I don’t want to define test_func in database as a stand-alone/package function. Is there any other way in 10G.
    Thanks.

    Works for me...
    SQL> select banner from v$version;
    BANNER
    Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bi
    PL/SQL Release 10.2.0.3.0 - Production
    CORE 10.2.0.3.0 Production
    TNS for Solaris: Version 10.2.0.3.0 - Production
    NLSRTL Version 10.2.0.3.0 - Production
    SQL> set serverout on
    SQL> declare
    2 v1 varchar2(2000);
    3 function test_func ( v2 varchar2) return varchar2
    4 is
    5 begin
    6 return v2 || 'x' || v2;
    7 end;
    8 begin
    9 -- ok
    10 v1 := test_func('Hello');
    11 dbms_output.put_line (v1);
    12 end;
    13 /
    HelloxHello
    PL/SQL procedure successfully completed.

  • PLS-00231: function error

    version : Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - Production
    declare
    v_mail_cust_code maz_sr_au_incentive_cust_hist.mail_cust_code%type;
    function inc_uniq_code
    return varchar2
    is
    v_unique_code maz_sr_au_incentive_cust_hist.mail_cust_code%type;
    v_unique boolean := FALSE;
    v_count number;
    begin
    while v_unique != TRUE
    loop
    select to_char(round(dbms_random.value(1000000,9999999))) into v_unique_code from dual;
    select count(*) into v_count from maz_sr_au_incentive_cust_hist
    where rtrim(mail_cust_code) = v_unique_code;
    if v_count = 0 then
    v_unique := TRUE;
    end if;
    end loop;
    return v_unique_code;
    end inc_uniq_code;
    begin
    select inc_uniq_code into v_mail_cust_code from dual;
    dbms_output.put_line('inc_uniq_code : '|| v_mail_cust_code);
    end;
    error :
    ORA-06550: line 22, column 8:
    PLS-00231: function 'INC_UNIQ_CODE' may not be used in SQL
    ORA-06550: line 22, column 8:
    PL/SQL: ORA-00904: "INC_UNIQ_CODE": invalid identifier
    ORA-06550: line 22, column 1:
    PL/SQL: SQL Statement ignored
    Can someone help ?
    Thanks
    Raghu

    correction to by earlier post (table names were given in reverse earlier)
    begin
    insert into xyz_SR_AU_INCENTIVE_CUST_hist (a,b,c,d)
    select a,b,c, package.function_name
    from xyz_SR_AU_INCENTIVE_CUST_stage;
    end;
    error :
    ORA-04091: table xyz_SR_AU_INCENTIVE_CUST_HIST is mutating, trigger/function may not see it
    ORA-06512: at "xyz_DEV.xyz_INC_PKG", line 13
    ORA-06512: at line 2
    function code :
    function inc_uniq_code
    return varchar2
    is
    v_unique_code xyz_sr_au_incentive_cust_hist.mail_cust_code%type;
    v_unique boolean := FALSE;
    v_count number;
    begin
    while v_unique != TRUE
    loop
    v_unique_code := to_char(round(dbms_random.value(1000000,9999999)));
    select count(*) into v_count from xyz_sr_au_incentive_cust_hist
    where rtrim(mail_cust_code) = v_unique_code;
    if v_count = 0 then
    v_unique := TRUE;
    end if;
    end loop;
    return v_unique_code;
    end inc_uniq_code;
    end xyz_INC_PKG;
    xyz_SR_AU_INCENTIVE_CUST_stage does not have any triggers.
    Trigger on xyz_SR_AU_INCENTIVE_CUST_hist
    CREATE OR REPLACE TRIGGER xyzSRAUICH_TIMESTAMP_BIU_ROW
    BEFORE INSERT OR UPDATE
    ON xyz_SR_AU_INCENTIVE_CUST_HIST
    FOR EACH ROW
    BEGIN
    IF inserting OR updating THEN
    IF inserting THEN
    :new.added_user:=USER;
    :new.added_date:=SYSDATE;
    ELSE
    :new.added_user:=:old.added_user;
    :new.added_date:=:old.added_date;
    END IF;
    :new.updated_user:=USER;
    :new.updated_date:=SYSDATE;
    END IF;
    END;
    Also, it seems no logic in including this :new.added_user:=:old.added_user;
    :new.added_date:=:old.added_date;

  • Error PLS-00231 When Calling a Local Function In a Procedure

    I hope someone can help me find a workaround to this problem:
    I have a function defined within a PL/SQL block. When I call the function from a SQL statement, I get the PLS-00231 error, which says "Function <fn name> may not be used in SQL.". I don't really understand why I can't do this, since the function works perfectly if I create it in the database. Unfortunately, storing the function in the database is not a desirable option.
    Below is a very simple example program to illustrate the point. Any feedback would be greatly appreciated. Thanks. Brian
    DECLARE
    var INTEGER;
    FUNCTION return_it (i IN INTEGER) RETURN INTEGER IS
    BEGIN
    RETURN i;
    END;
    BEGIN
    SELECT return_it (4)
    INTO var
    FROM dual;
    END;
    --

    Your function return_it is not part of database so you cant use in query.
    Here is what you can do
    08:18:20 SQL> ed
    Wrote file afiedt.buf
    1 DECLARE
    2 var INTEGER;
    3 FUNCTION return_it (i IN INTEGER) RETURN INTEGER IS
    4 BEGIN
    5 RETURN i;
    6 END;
    7 BEGIN
    8 var := return_it (4);
    9 DBMS_OUTPUT.PUT_LINE('var = '||var);
    10* END;
    08:18:26 SQL> /
    var = 4
    PL/SQL procedure successfully completed.

  • Problem when calling a return type BOOLEAN SQL Function in a package

    Hi All,
    I am having problem when trying to call a SQL function in a package with return type BOOLEAN
    The SQL function signature is as follows
    CREATE OR REPLACE PACKAGE RMSOWNER.ORDER_ATTRIB_SQL ****
    FUNCTION GET_PO_TYPE_DESC(O_error_message IN OUT VARCHAR2,
    I_PO_TYPE       IN     VARCHAR2,
    O_PO_TYPE_DESC  IN OUT VARCHAR2)
    RETURN BOOLEAN;
    Following is my java code
    +CallableStatement cs3 = conn.prepareCall("{?=call ORDER_ATTRIB_SQL.GET_PO_TYPE_DESC(?,?,?)}");+
    +cs3.registerOutParameter(1, java.sql.Types.BOOLEAN);+
    +cs3.registerOutParameter(2, java.sql.Types.VARCHAR);+
    +cs3.registerOutParameter(4, java.sql.Types.VARCHAR);+
    +cs3.setString(2, "");+
    +cs3.setString(3, "ST");+
    +cs3.setString(4, "");+
    +ResultSet rs3 = cs3.executeQuery();+
    I get the following exception, i tried changing the sql type(registerOutParameter) from boolean to bit but i still getting this exception.
    But when i call any other functions with return type other than boolean they work perfectly fine.
    Please can anyone help me fix this issue, i am not sure if its anything to do with vendor JDBC classes?
    +java.sql.SQLException: ORA-06550: line 1, column 13:+
    +PLS-00382: expression is of wrong type+
    +ORA-06550: line 1, column 7:+
    +PL/SQL: Statement ignored+
    +     at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)+
    +     at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)+
    +     at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)+
    +     at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:743)+
    +     at oracle.jdbc.driver.T4CCallableStatement.doOall8(T4CCallableStatement.java:215)+
    +     at oracle.jdbc.driver.T4CCallableStatement.executeForRows(T4CCallableStatement.java:954)+
    +     at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1168)+
    +     at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3316)+
    +     at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:3422)+
    +     at oracle.jdbc.driver.OracleCallableStatement.execute(OracleCallableStatement.java:4394)+
    #####

    Hello People!
    There is another workaround!!
    See the example below:
    private String callBooleanAPi(String tableName,String apikey,String dtInicio,String dtFim,String comando) throws SQLException {
                   CallableStatement cs = null;
                   String call = "";
                   String retorno = null;
                   try {
                        if(comando.equalsIgnoreCase("INSERT")){
                             call = "declare x BOOLEAN; y varchar2(2);begin x :=PKG.INSERT(?,?,?,?,?); if x then y := 'S'; else y :='N'; end if; ? := y;end;";
                        } else if(comando.equalsIgnoreCase("UPDATE")){
                             call = "declare x BOOLEAN; y varchar2(2);begin x := PKG.UPDATE(?,?,?,?,?); if x then y := 'S'; else y :='N'; end if; ? := y;end;";
                        } else if(comando.equalsIgnoreCase("DELETE")){
                             call = "declare x BOOLEAN; y varchar2(2);begin x := PKG.DELETE(?,?,?,?,?); if x then y := 'S'; else y :='N'; end if; ? := y;end;";
                        cs = conn.prepareCall(call);
                        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
                        SimpleDateFormat sdfToSqlDate = new SimpleDateFormat("yyyy-MM-dd");
                        java.util.Date dataInicialVigencia =null;
                        java.util.Date dataFinalVigencia = null;
                        Date dtInicialFormatada =null;
                        Date dtFinalFormatada = null;
                        if(dtInicio != null && !dtInicio.equals("")){
                             dataInicialVigencia = sdf.parse(dtInicio);
                             dtInicio =sdfToSqlDate.format(dataInicialVigencia);
                             dtInicialFormatada = Date.valueOf(dtInicio);
                        if(dtFim != null && !dtFim.equals("")){
                             dataFinalVigencia = sdf.parse(dtFim);
                             dtFim =sdfToSqlDate.format(dataFinalVigencia);
                             dtFinalFormatada = Date.valueOf(dtFim);
                        cs.setString(1, tableName);
    cs.setString(2, apikey);
    cs.setDate(3, dtInicialFormatada );
    cs.setDate(4, dtFinalFormatada );
    cs.registerOutParameter(5, java.sql.Types.VARCHAR);
    cs.registerOutParameter(6, java.sql.Types.VARCHAR );
    cs.execute();
                        retorno = cs.getString(6);
                        System.out.println( cs.getString(5));
                   } catch(SQLException e){
                   throw new SQLException("An SQL error ocurred while calling the API COR_VIGENCIA: " + e);
                   } catch(Exception e){
                   Debug.logger.error( "Error calculating order: " + id, e );
                   } finally {
                   if (cs != null) {
                   cs.close();
                   cs = null;
                   return retorno;
    As you can see the CallableStatement class acepts PL/SQl blocks.
    Best Regards.

  • I can access a function in a package using OCI drivers but not PDO drivers

    Hello all, i am a newbie to Oracle and its drivers for PHP. I would like to use PDO, and I have my database activity in packages, which have procedures and functions. My package has overloaded functions and that has been giving me a tough time with these drivers. So one signature of my function get_data contains a four arguments and all four are numbers, while another signature of get_data has the first two as numbers and the next two as varchar2. So when I try to access this function which is part of a package, I am able to retrieve data, and the driver I am using is OCI8, but when I try to do the same with PDO, it does not work. It gives me this error,
    *General error: 6553 OCIStmtExecute: ORA-06553: PLS-307: too many declarations of 'GET_DATA' match this call  (/var/www/php-5.3.3/ext/pdo_oci/oci_statement.c:146)' in /var/www/pdo_check.php:251 Stack trace: #0 /var/www/pdo_check.php(251): PDOStatement->execute() #1 /var/www/pdo_check.php(345): dbPDO->execPackage2() #2 {main} thrown in /var/www/pdo_check.php on line 251 *
    I got this error earlier with OCI drivers, then I added the datatype while binding the values.
    Has anybody had this headache earlier??
    ##Works
    *$qu = oci_parse($connect, 'select pack.get_data(:p1,:p2,:p3,:p4)as rc from dual');
    $p1 = (int)121;
    $p2 = (int)222;
    $p3 = (int)324;
    $p4 = (int)001;
    oci_bind_by_name($qu,":p1",$p1,10,OCI_B_INT);
    oci_bind_by_name($qu,":p2",$p2,10,OCI_B_INT);
    oci_bind_by_name($qu,":p3",$p3,10,OCI_B_INT);
    oci_bind_by_name($qu,":p4",$p4,10,OCI_B_INT);
    oci_execute($qu) or die("did not execute");
    $r = oci_fetch_array($qu);*
    ##Does not work
    *$sql = 'select pack.get_data(:p1,:p2,:p3,:p4) from dual';
    $result = $this->dbConnect->prepare($sql);
    $p1 = (int)2;
    $p2 = (int)2;
    $p3 = (int)2;
    $p4 = (int)6;
    $result->bindParam(':p1', $p1, PDO::PARAM_INT);
    $result->bindParam(':p2', $p2, PDO::PARAM_INT);
    $result->bindParam(':p3', $p3, PDO::PARAM_INT);
    $result->bindParam(':p4', $p4, PDO::PARAM_INT);
    $result->execute();*
    I am still perplexed why is PDO giving me an error, when I have virtually mentioned everything is asks for?

    I think the only person who can really answer this question is Chris Jones. For my money I tend to steer clear of PDO as it is a bit quirky ( at least in my experience ) and it does not support reference cursors.

  • Need Help: Using Ref Cursor in ProC to call a function within a Package

    I'm calling a function within a package that is returning a REF CURSOR.
    As per the Oracle Pro*C Programmer's Guide, I did the following:
    1) declared my cursor with a: EXEC SQL BEGIN DECLARE SECTION and declared the cursor as: SQL_CURSOR my_cursor;
    2) I allocated the cursor as: EXEC SQL ALLOCATE :my_cursor;
    3) Via a EXEC SQL.....END-EXEC begin block
    I called the package function and assign the return value to my cursor
    e.g. my_cursor := package.function(:host1, :host2);
    Now, the only difference between my code and the example given in the Pro*C Programmer's Guide is that the example calls a PROCEDURE within a package that passes back the REF CURSOR as an OUT host variable.
    Whereas, since I am calling a function, the function ASSIGNS the return REF CURSOR in the return value.
    If I say my_cursor := package.function(:host1, :host2); I get a message stating, "PLS-00201: identifier MY_CURSOR" must be declared"
    If I say :my_cursor := package.function(:host1, :host2); I get a message stating, "ORA-01480: trailing null missing from STR bind value"
    I just want to call a package function and assign the return value to a REF CURSOR variable. There must be a way of doing this. I can do this easily in standard PL/SQL. How can this be done in Pro*C ???
    Thanks for any help.

    Folks, I figured it out. For those who may face this problem in the future you may want to take note for future reference.
    Oracle does not allow you to assign the return value of a REF CURSOR from a FUNCTION ( not Procedure - - there is a difference) directly to a host variable. This is the case even if that host variable is declared a CURSOR variable.
    The trick is as follows: Declare the REF CURSOR within the PL/SQL BEGIN Block, using the TYPE statement, that will contain the call to the package function. On the call, you then assign the return REF CURSOR value that the function is returning to your REF CURSOR variable declared in the DECLARE section of the EXEC SQL .... END-EXEC PL/SQL Block.
    THEN, assign the REF CURSOR variable that was populated from the function call to your HOST cursor varaible. Then fetch this HOST Cursor variable into your Host record structure variable. Then you can deference individual fields as need be within your C or C++ code.
    I hope this will help someone facing a deadline crunch. Happy computing !

  • Invoke a function in a package

    I need to call a function in a package that will return back to
    me the database I am connected to
    The package and function is called :p_common.sf_get_dbname
    CallableStatement getDBName=null;
    ResultSet rs2=null;
             try
                  ggetDBName = con.prepareCall("{call ? := P_COMMON.SF_GET_DBNAME()}");
                   getDBName.registerOutParameter(1, OracleTypes.CURSOR);
                   getDBName.execute();
                   rs2 = (ResultSet) getPxCcy.getObject(1);
                   String db =  rs2.getString(1);
                   logger.info("DB connected to is " + db);
    I am not getting the correct dbname? is the above way to do the correct way?

    i need to get the name of the database i am connected to by calling a function in a package
    Connection con = null;
              CallableStatement getDBName = null;
              ResultSet rs2 = null;
              try
                   Object object = Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
                   java.sql.Driver driver = (Driver) object;
                   DriverManager.registerDriver(driver);
                   con = DriverManager.getConnection(dbURL, dbUID, dbPWD);
                   getDBName = con.prepareCall("{call ? := P_COMMON.SF_GET_DBNAME()}");
                   getDBName.registerOutParameter(1, OracleTypes.CURSOR);
                   getDBName.execute();
                   rs2 = (ResultSet) getDBName.getObject(1);
                   while(rs2.next()){
                         String name=rs2.getString(1);
                         logger.info("DB NAME is " + name);
    ERROR:
    java.lang.NullPointerException
    java.sql.SQLException: ORA-06550: line 1, column 13:
    PLS-00382: expression is of wrong type
    ORA-06550: line 1, column 7:
    PL/SQL: Statement ignoredCan anyone please help me on this

  • Where can I see functions prototype in package wwv_name_value ?

    Hi,
    I'm interested to see function prototypes from packages wwv_name_value, wwv_standard_util, wwv_lang and others.
    How is it possible ?
    I used wwv_name_value.get_string function in Advanced PL/SQL window (following a given example), but in the future maybe I'll find other usefull functions which I would like to use...
    I'm working with WebDB 2.1.
    Thanks:
    Szilard

    Hi,
    You can see public apis at this location.
    http://portalstudio.oracle.com/pls/ops/docs/FOLDER/COMMUNITY/PDK/plsql/doc/astart.htm
    For wwv_name goto the preference APIS.
    For wwv_lang goto national language APIS
    Thanks,
    Sharmila

  • How to find out list of procedures and functions inside a package

    How I can find out the list of Procedures and Functions inside a Package.

    Look at ALL_PROCEDURES and ALL_ARGUMENTS.

  • How to use the Table Function defined  in package in OWB?

    Hi,
    I defined a table function in a package. I am trying to use that in owb using Table function operator. But I came to know that, owb R1 supports only standalone table functions.
    Is there any other way to use the table function defined in a package. As like we create synonyms for functions, is there any other way to do this.
    I tryed to create synonyms, it is created. But it is showing compilation error. Finally I found that, we can't create synonyms for functions which are defined in packages.
    Any one can explain it, how to resolve this problem.
    Thank you,
    Regards
    Gowtham Sen.

    Hi Marcos,
    Thank you for reply.
    OWB R1 supports stand alone table functions. Here what I mean is, the table fucntion which is not inculded in any package is a stand alone table function.
    for example say sample_tbl_fn is a table function. It is defined as a function.It is a stand alone function. We call this fucntion as "samp_tbl_fn()";
    For exampe say sample_pkg is a package. say a function is defined in a package.
    then we call that function as sample_pkg.functionname(); This is not a stand alone function.
    I hope you understand it.
    owb supports stand alone functions.
    Here I would like to know, is there any other way to use the functions which are defined in package. While I am trying to use those functions (which are defined in package -- giving the name as packagename.functionname) it is throwing an error "Invalid object name."
    Here I would like know, is there any other way to use the table functions which are defined in a package.
    Thank you,
    Regards,
    Gowtham Sen.

  • Can I call a function in another package?

    Dear all,
    Can I call a function in another package?
    Say I have package A, and package B.
    Is it possible for me to call a function in inside package A, within a function inside package B?
    If yes, what's the syntax.
    Thanks in advance!

    The variable in the calling package that will receive the value of the function in the other package needs to be defined based on that type in the other package directly:
    sql>create or replace package pkg_a
      2  is
      3    type testTable is table of varchar2(10) index by binary_integer;
      4 
      5    function f_a return testTable;
      6  end;
      7  /
    Package created.
    sql>create or replace package body pkg_a
      2  is
      3    function f_a
      4      return testTable
      5    is
      6      v_table testTable;
      7    begin
      8      v_table(1) := 'One';
      9      v_table(2) := 'Two';
    10      return v_table;
    11    end; 
    12  end;
    13  /
    Package body created.
    sql>create or replace package pkg_b
      2  is
      3    procedure p_b;
      4  end; 
      5  /
    Package created.
    sql>create or replace package body pkg_b
      2  is
      3    procedure p_b
      4    is
      5      v_table pkg_a.testTable;  -- this variable has to be based on the type in pkg_a
      6    begin
      7      v_table := pkg_a.f_a;
      8      for i in 1..v_table.count loop
      9        dbms_output.put_line( v_table(i) );
    10      end loop;
    11    end;
    12  end; 
    13  /
    Package body created.
    sql>exec pkg_b.p_b
    One
    Two
    PL/SQL procedure successfully completed.

  • Variable Scope at package or interface level

    Hi,
    Can we set the ODI Project variable scope to package or interface level
    because in my project im using a last rundate refresh variable this variable value will be changed at the time of execution of each package.
    Thanxs
    Madhavi

    you can create it as "Not Persistent" and then its value exist per ODI session.
    In this way, several sessions can keep independent value to the same variable.

  • How can I compile all functions, procedures and packages with a script?

    I need to compile all functions, procedures and packages of 5 schemas (users) with a script.
    How can I do it?
    Thanks!

    you can create a script to select all invalid objects in those schemas Since Oracle 8 introduced NDS this approach has struck me as a trifle old fashioned. It's much simpler to loop round the query in PL/SQL and use EXECUTE IMMEDIATE to fire off the DDL statements. No scripts, no muss, no fuss.
    Having said that, the problem with this approach and also with using DBMS_UTILITY.COMPILE_SCHEMA is that they do not compile all the invalid objects in dependency order. This may result in programs being invalidated by the subsequent compilation of dependencies. This is due to the introduction of Java into the database.
    The UTLRP script is much better, because it (usually) avoids cyclic references. But you still may need to run it more than once.
    In general it is better to avoid sledgehammer recompilations (like DBMS_UTILITY.COMPILE_SCHEMA, which starts by invalidating all the objects). If we have twenty invalid objects, nineteen of which are dependencies of the twentieth, we actually only need to recompile the master object, as recompiling it will trigger the recompilation of all the others.
    Cheers, APC

  • Call a function inside a package from a stored procedure

    Hello:
    I am kind of new to the stored procedure. Does anyone know how to call a function inside a package from another stored procedure?
    I have a existing function (func_b) inside a package (pack_a) and it returns a cursor. I want to call this function from a stored procedure (proc_c) so that I use the data inside the cursor.
    can I do the following in proc_c:
    my_cursor1 SYS_REFCURSOR;
    begin
    my_cursor1 := exec pack_a.func_b
    end
    It will be very helpful if anyone can point me to any reading or example. Thank you very much for your information.

    guys:
    Thank you for your information so far. I need some more help here. I was able to run the function in my stored procedure. However, I was not able to print the result on the screen to view the cursor result, although I am using dbms_output.put_line statement inside my stored procedure.
    I use the following statement to execute my stored procedure on sql*plus. I can tell the stored procedure is executed successfully, but I did see anything printed:
    DECLARE TEMP VARCHAR2(100);
    BEGIN PROC_LAWS_CAD_NAME_SEARCH('LPD', 'TEST DEVICE ID', 'TEST LAST NAME', 'TEST FIRST NAME', 'F', '11112009', TEMP); END;
    I tried to use 'set serveroutput on' and got the following error:
    ERROR:
    ORA-06502: PL/SQL: numeric or value error: host bind array too small
    ORA-06512: at line 1
    I am kind of confused now. thank you for your help.
    Jack
    Here is my procedure:
    create or replace
    PROCEDURE PROC_SEARCH
    ( AGENCY_ID IN VARCHAR2,
    DEVICE_ID IN VARCHAR2,
    L_NAME IN VARCHAR2,
    F_NAME IN VARCHAR2,
    SEX IN VARCHAR2,
    DOB IN VARCHAR2,
    CAD_NAME_SCH_RESULT_STR OUT VARCHAR2)
    AS
    v_agy_id varchar2(10);
    v_device_id varchar2(20);
    v_l_name varchar2(25);
    v_f_name varchar2(15);
    v_sex varchar2(1);
    v_dob date;
    -- this cursor is going to be used to store a list of warrant matching
    -- name search criteria
    cad_srch_cursor sys_refcursor;
    objSrch SEARCH_RESULT_TEMP%ROWTYPE;
    BEGIN
    cad_srch_cursor := SEARCH_PKG.SEARCH('TESTING', 'TESTER', null, null,null, null, getPhonetic('TESTING'));
    LOOP
    FETCH cad_srch_cursor INTO objSrch;
    EXIT WHEN cad_srch_cursor%NOTFOUND;
    --insert into SEARCH_RESULT_TEMP (name_last) values (objSrch.name_last);
    CAD_NAME_SCH_RESULT_STR := objSrch.name_last;
    dbms_output.put_line('First:'||objSrch.name_first||':Last:'||objSrch.name_last||':Middle:'||objSrch.name_middle);
    end LOOP;
    END PROC_LAWS_SEARCH;
    -----------------------------------------

Maybe you are looking for