Execute in PL-SQL a configuartion function

Hi,
i would like execute a function PL-SQL in other PL-SQL block but the name of function to execute there isn't in the code but in the a table. The first procedure PL-SQL read in the table the name of function to execute.
The EXECUTE IMMEDIATE is very bad performer.
You can help me?
Thanks

Hi,
Sorry, I'm not sure if I understand the problem.
If you can't hard-code the name of the function, then you have to use EXECUTE IMMEDIATE or some other kind of dynamic SQL.
If there are a small number of possible functions, and you know them all, then you can hard-code them all, something like this
x := CASE  function_name
           WHEN  'f_1'  THEN  f_1 (y);
           WHEN  'f_2'  THEN  f_2 (y);
           WHEN  'f_3'  THEN  f_3 (y);
     END;

Similar Messages

  • ORA-06521: PL/SQL: Error mapping function

    Hi folks,
    I am trying to run gather_table_stats for a particular table but am getting the below error. Any ideas?
    SQL> execute DBMS_STATS.gather_table_stats( ownname=>'DBO',tabname=>'CD_JOURNAL_CHANGE_REG',method_opt=>'FOR ALL INDEXED COLUMNS',cascade=>TRUE);
    BEGIN DBMS_STATS.gather_table_stats( ownname=>'DBO',tabname=>'CD_JOURNAL_CHANGE_REG',method_opt=>'FOR ALL INDEXED COLUMNS',cascade=>TRUE); END;
    ERROR at line 1:
    ORA-06521: PL/SQL: Error mapping function
    ORA-06512: at "SYS.DBMS_STATS", line 10301
    ORA-06512: at "SYS.DBMS_STATS", line 10315
    ORA-06512: at line 1
    I have runt utlrp.sql as sys but with no avail.
    Kindest Regards,
    Will

    You did not mention if the applicable table contains an ADT columns, nested tables and so on.
    You can also do a basic test to determine if the problem is potentially with the table, or with dbms_stats itself. Create a plain table, e.g.
    create table foo( id number, foo_char varchar2(100), constraint pk_foo primary key( id ) using index );
    Using the exact same dbms_stats parameters, do this table. If it works, it points to a potential problem with the other table - some data structure/data type issue maybe. If it does not, then you have a problem with dbms_stats itself.
    You can also drop the indexes on the DBO table and try dbms_stats with different parameters. I.e. change the conditions to see if the error still occur in order to isolate the problem.
    You also could log an iTar/SR for this with Oracle Support.

  • ORA-06521: PL/SQL: Error mapping function with 10.1.0 external procedure

    We have an external procedure running fine on 8.1.7 on VMS. After compiling and linking succesfully under 10.1.0, I get ORA-06521 PL/SQL: Error mapping function and ORA-06522: ERROR - vms_dlsym for file x, where x in the filename of the linked executable. Another external procedure that does not connect to the 10.1.0 database runs fine. What could be causing this error in Server 10.1.0 on VMS?
    Thanks,
    Dave

    Here is the code to create the function:
    CREATE OR REPLACE FUNCTION f1
    (h_file_name IN VARCHAR2)
    RETURN BINARY_INTEGER
    IS EXTERNAL
    LIBRARY l1
    NAME "f1"
    LANGUAGE C
    WITH CONTEXT
    PARAMETERS
    (CONTEST,
    h_file_name string);
    Here is the beginning of the Pro*C:
    int f1(epctx, h_file_name)
    OCIExtProcContext *epctx;
    char h_file_name[70];
    char h_line_txt [251];
    int lineno;
    FILE *fptr;
    /* register the connection context ... */
    EXEC SQL REGISTER CONNECT USING :epctx;
    The function loads a flat file into the database. It is probably not related but are unable to SQLPLUS/ or SQLLDR/ into the database from an OS autheniticated account (get ORA-12547: TNS:lost contact.) Thanks for taking the time to look at this. There aren't many people trying this on VMS, I'd bet.

  • Call a PL/SQL procedure or function from applet

    Could anyone please let me know how I could call a PL/SQL procedure
    or function from a JDBC method from applet with Internet Explorer?

    It depends from where you are calling your PLSQL routine. If it is SQL*Plus then you can use & (ampersand) with the variable to be input at run time.
    If you are executing the PLSQL routine from another application (some front end application) then it's not possible. Because when a procedure is executing at server side, the front end application does not have control, and the control is only transfered back to front end application when the PLSQL routine either completes successfully or throws an exception.
    In either case, you can not go back to the PLSQL routine.
    In this case, what you can do is, write code in your front end application to get that variable value from user and then pass that value to PLSQL routine.

  • Regarding Locking of PL/SQl Procedure or function

    Hi,
    My PL/SQL code is getting locked. The flow is like this.
    My PL/SQL code writes a particular data into a file which is read by a C program. Once the processing is done then the C driver writes back into anither file called response file from which my PL/SQL code reads from. What is happening is I use dbms_lock.sleep in my PL/SQL code. Now my PL/SQL code is hanging. In the sense when try to recompile my PL/SQL file, it gets timed out saying that It could not lock the object [Function Name]. How can I find out whether any other process is using my File or not. Even if it using how can I release the lock.
    Thanks in avance

    I think you have executed this PL/SQL code earlier and is hung. When you are trying to recompile that, it is not allowing to change the code as it is already being used and "locked".
    You need to find out the session which is holding the lock on this code and kill the same.

  • Problem calling PL/SQL procedures from Function Activity Issue

    Hi,
    I am working with Oracle Workflow and I have found some problems adding a function activity in the process diagram. This function only updates some registers on the data base, or at least it should do that.
    I have been looking through the items in this forum and I have found similar things but not the right one. Of course I am a learner in all this and maybe the answer in there.
    I will try to show you my problem:
    When the procedure is supposed to be called, it doesnt´t do that and instead I found the following error:
    Wf_Engine_Util.Function_Call(usuario.WF_FIN_TG.FINTG1, FLUJO1, 092S0087, 588782, RUN) ORA-01403: no data found
    I have tested all the queries from TOAD and SAL Server, and all of them return some results.
    I have tried to take out all the queries from the procedure as the following to try to avoid or change the error but it continues as "ORA-01403: no data found":
    PROCEDURE FINTG1(
    p_itemtype IN VARCHAR2,
    p_itemkey IN VARCHAR2,
    p_actid IN NUMBER,
    p_funcmode IN VARCHAR2,
    p_resultado IN OUT VARCHAR2
    ) IS
    flujo VARCHAR2(;
    p_resultado :=1;
    END FINTG1;
    It seems as the workflow engine try to search something before executing my procedure.
    Has anybody any idea about how to solve this problem? Thanks a lot.

    WF_ENGINE_UTIL.Function_Call is the lowest level procedure executed by the engine before it executes the procedure associated with the function activity. I am not sure if this procedure would throw ORA 1403 since this does not have a query or a collection.
    Please note that ORA 1403 could occur from a SQL query or a collection.
    Looking at your code, p_resultado :=1;
    The function activity should return a resultout that the workflow engine understands. The valid results from the function activities as per the workflow guide are,
    wf_engine.eng_completed - 'COMPLETE'; -- Normal completion
    wf_engine.eng_active - 'ACTIVE'; -- Activity running
    wf_engine.eng_waiting - 'WAITING'; -- Activity waiting to run
    wf_engine.eng_notified - 'NOTIFIED'; -- Notification open
    wf_engine.eng_suspended - 'SUSPEND'; -- Activity suspended
    wf_engine.eng_deferred - 'DEFERRED'; -- Activity deferred
    wf_engine.eng_error - 'ERROR'; -- Completed with error
    You would normally use COMPLETE or ERRORED within your activity. Please change your code to use a valid resultout and try again.
    Hope this helps.
    Thanks

  • SQL Buffering class / function in Oracle??

    Hi All:
    Im trying to write a java program that can make SQL transactions such as insert, update etc. I have questions regarding ways on doing so with JDBC.
    Does Oracle have some kind of Array buffer like java classes that can let me serialize this class object and send it over to the DB (or let me point to / subclass such a class)? This object could contain a collected set of SQL statements that I want to execute. Once this object arrives in the DB, the DB will take care of it and execute all the SQL statements in the object accordingly.
    I know that I can just execute the SQL statements individually at runtime. However, the reason I want to do this is because maintaining a JDBC connection might be expensive and natural disasters and happen to this connection, so I want to minimize JDBC access as much as possible. Therefore wondering if Oracle supports this kind of function.
    Please point me to related documents. Or if you have some other idea can help me to solve my problem.
    Thank you in advance!!
    Mark
    null

    Try writing a stored procedure. See oracle docs for details.
    <BLOCKQUOTE><font size="1" face="Verdana, Arial">quote:</font><HR>Originally posted by Mark Lin ([email protected]):
    Hi All:
    Im trying to write a java program that can make SQL transactions such as insert, update etc. I have questions regarding ways on doing so with JDBC.
    Does Oracle have some kind of Array buffer like java classes that can let me serialize this class object and send it over to the DB (or let me point to / subclass such a class)? This object could contain a collected set of SQL statements that I want to execute. Once this object arrives in the DB, the DB will take care of it and execute all the SQL statements in the object accordingly.
    I know that I can just execute the SQL statements individually at runtime. However, the reason I want to do this is because maintaining a JDBC connection might be expensive and natural disasters and happen to this connection, so I want to minimize JDBC access as much as possible. Therefore wondering if Oracle supports this kind of function.
    Please point me to related documents. Or if you have some other idea can help me to solve my problem.
    Thank you in advance!!
    Mark<HR></BLOCKQUOTE>
    null

  • PL-SQL Procedures and Functions

    Hi All,
    while reading about PL-SQL Procedures I came across a concept, which states that we can not include bind or host variables in procedures because the compiler cannot resolve the reference to bind variable.
    Can someone please explain it more elaborately.
    Thank you.

    983037 wrote:
    while reading about PL-SQL Procedures I came across a concept, which states that we can not include bind or host variables in procedures because the compiler cannot resolve the reference to bind variable. Correct. This code cannot compile as it needs a bind variable to be bound:
    create or replace function GetEmpName return varchar2 is
      empName emp.ename%Type;
    begin
      select
        e.ename into empName
      from emp
      where emp_no = :BIND_VARIABLE;
      return( empName );
    end;Stored code cannot include bind variables as how is Oracle's compiler to know the data type of +:BIND_VARIABLE+ - or execute the function at run-time when the code is already compiled, but missing a bind call to supply a value for +:BIND_VARIABLE+ ?
    So the code needs to look as follows instead:
    create or replace function GetEmpName( empID number ) return varchar2 is
      empName emp.ename%Type;
    begin
      select
        e.ename into empName
      from emp
      where emp_no = empID;
      return( empName );
    end;The empID PL/SQL variable will be treated (transparently) as a bind variable when the SQL SELECT statement in that function is parsed and executed as a SQL cursor.
    You as caller, however need to supply bind variables when calling this function from an external client (e.g. SQL*Plus, Java, C/C++, etc). E.g.
    --// using sqlplus as example - create 2 sqlplus host variables
    var name varchar2(100)
    var id number
    --// assign a value to a host variable
    exec :id := 12345;
    --// execute the stored function code binding host variables as bind variables
    begin
      :name := GetEmpName( :id );
    end;
    --// display host variable
    print name

  • Executing a pl sql package from a form

    hi,
    I am using apex to develop a form, which has url's to several pl sql files / packages. I want this feature:
    when i click on the url it should execute the pl sql procedures stored in that corresponding file.
    Can i get a head start on this.
    PS: I am using chapter 9 of apex tut.
    "How to Upload and Download Files in an Application"
    as a starting point to develop this form

    Depending on whether or not your pl/sql procedures/packages return values, you can create a page with 2 different types of regions (both of type "pl/sql function return sql query") and write code similar to the following -
    declare
      v_sql varchar2(1000) ;
    begin
      execute immediate :P7_PLSQL_NAME ;
      /* P7_PLSQL_NAME is a page item that is passed a value from the link that was clicked */
      v_sql := 'select ''PL/SQL Executed Successfull!!!!'' result from dual ' ;
      return v_sql ;
    end ;

  • PL/SQL URL decode function

    I am looking for a pl/sql url decode function. Does not appear to be in owa_util or htp/htf. Does any one have one please?

    You can use the utl_url package that provides public APIs for both encoding and recoding purposes.

  • Error while executing one pl/sql

    i am facing one error while executing a pls/sql
    kindly suggest the possible cause and solution for the same
    declare
    ERROR at line 1:
    ORA-08102: index key not found, obj# 31850, dba 104863849 (2)
    ORA-06512: at "ERP.DELBATCHID", line 24
    ORA-06512: at line 13

    08102, 00000, "index key not found, obj# %s, dba %s (%s)"
    // *Cause:  Internal error: possible inconsistency in index
    // *Action:  <b>Send trace file to your customer support representative, along
    //           with information on reproducing the error</b>

  • SQL query or function...

    Hi everyone,
      Please help me to clarify this question
    I have a "patient" table and a "address" table.And each patient has differnt types of addresses
    like PMI,Mailing and default address i need to pick patient address in the order of preference
    (PMI,Mailing ,Default)
    I have two options to get the address of a patient.Either write a SQL query to get the address of a
    patient(according to preference)
    or write a function which checks
    if there is PMI,Mailing and default
      take PMI
    or
    If there is mailing and Default
    take mailing
    or
    take default.
    which one is the best method to get the address of a patient?  SQL query or function..
    Definitely everyone will say that it should be direct SQL query instead of multiple function calls.
    But in my organization there are many developers which will get "patient address" in their application
    or SQL code or PL/SQL code or from some
    'X' Business intelligence tool.
    At this scenario is it best to have a function which every one will call and get a standardized output
    for every one.
    Question:
    In my scenario which one is the best to have "SQL query or function"?
    if i choose "function" i have to sacrifice the performance
    if i choose "SQL query" i am not sure whether each and every developer querying the same way as it would be
    Sorry if it is a dumb question to ask.
    Thanks in advance
    phani

    question for hoek: what if i have to choose between SQL query and function? (suppose they dont accept to create a view)If views are not accepted (which is very strange imo), but you do need some 'standard object' which everybody can use, then you'd choose to use a function instead of everybody having 'their own query'.
    It's a trade-off between maintaining standards and performance (calling PL/SQL from SQL is usually to be avoided due to context-switching, the other way around is OK).
    One advantage of a view: no hassle with parameters you have to enter but never will use, you just pick the columns you need and there you go.
    Other one: it's straightforward, simple and clear.
    It's easier to maintain.
    But it all depends on what your function will return.
    Perhaps a REF CURSOR?
    Your question reminds me of this interesting discussion:
    http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:672724700346558185
    Edited by: hoek on Jul 1, 2009 4:39 PM tyop's

  • ORA-06521: PL/SQL: Error mapping function :ORA-06522:undefined :ODCIAggre

    Hi,
    I am getting the following error :
    SQL> select MinDistance(TT) from egg1;
    select MinDistance(TT) from egg1
    ERROR at line 1:
    ORA-06521: PL/SQL: Error mapping function
    ORA-06522: /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib/custagg.so:
    undefined symbol: ODCIAggregateInitialize
    I am compiling my C program with OCI using the following command :
    g++ -Wall -c custagg.c -o custagg.o -I$ORACLE_HOME/rdbms/public -I/usr/lib
    I am linking to get a shared library custagg.so file with following command :
    ld -shared -o custagg.so custagg.o $ORACLE_HOME/lib/l*.so ../../usr/lib/libstdc++.s*
    I am not getting any errors during these two phases.
    And when i am calling the extproc custagg(Mindistance) which i implemented using ODCI(oracle data catridge interface) ...I am getting the error undefined symbol : ODCIAggregateInitialize
    So can any one please let me know what shared libraries are required to access the ODCI services and also am I compiling and linking it the right way or am I missing any libraries.
    I have the oci.h & odci.h and several other header files in my :
    $ORACLE_HOME/rdbms/public
    And while linking i am using : $ORACLE_HOME/lib/*.so files.
    So I don't know whether my directory is missing some shared files related to ODCI : can any one please let me know which files or shared libraries I am missing :
    Below are list of files in my : $ORACLE_HOME/lib :
    custagg123.o libclntsh.so libdbcfg10.so libjox10.so libocci.so.10.1 liborasdkbase.so libskgxpd.so libunwind.so.5
    custagg.so libclntsh.so.10.1 libemmas10.so libldapjclnt10.so libocijdbc10.so liborasdkbase.so.10.2 libskgxpu.so libxdb.so
    facility.lis libclsra10.so libhasgen10.so libnjni10.so libocr10.so liborasdk.so libsqlplus.so shell.so
    hsdb_odbc.so libcorejava.so libheteroxa10.so libnjssl10.so libocrb10.so liborasdk.so.10.2 libsqora.so.10.1 sysliblist
    hsdb_ora.so libcoresh10.so libhsbase.so libnnz10.so libocrutl10.so libqsmashr.so libsrvm10.so
    lclasses12.zip libcprts.so.5 libhsnav.so libnque10.so libodm10.so libskgxn2.so libsrvmhas10.so
    libagtsh.so libcxa.so.3 libimf.so libntcpaio10.so libodmd10.so libskgxns.so libsrvmocr10.so
    libagtsh.so.1.0 libcxa.so.5 libirc.a libocci.so libons.so libskgxp10.so libuini10.so
    Please reply to my queries.
    Please let me know if you want to have a look at the symbols of my object file
    Thanks & Regards,
    -NN

    Your issue may relate to XE and it may relate to OCI but it does not relate to SQL and PL/SQL. Consider posting your question in a forum where it will be on topic.
    When you do include full version information (3 decimal places) and the code that is generating the exception.

  • ORA-06521:PL/SQL:Error mapping function :ORA-06522:undefined :ODCIAggregate

    Hi,
    I am getting the following error :
    SQL> select MinDistance(TT) from egg1;
    select MinDistance(TT) from egg1
    ERROR at line 1:
    ORA-06521: PL/SQL: Error mapping function
    ORA-06522: /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib/custagg.so:
    undefined symbol: ODCIAggregateInitialize
    I am compiling my C program with OCI using the following command :
    g++ -Wall -c custagg.c -o custagg.o -I$ORACLE_HOME/rdbms/public -I/usr/lib
    I am linking to get a shared library custagg.so file with following command :
    ld -shared -o custagg.so custagg.o $ORACLE_HOME/lib/l*.so ../../usr/lib/libstdc++.s*
    I am not getting any errors during these two phases.
    And when i am calling the extproc custagg(Mindistance) which i implemented using ODCI(oracle data catridge interface) ...I am getting the error undefined symbol : ODCIAggregateInitialize
    So can any one please let me know what shared libraries are required to access the ODCI services and also am I compiling and linking it the right way or am I missing any libraries.
    I have the oci.h & odci.h and several other header files in my :
    $ORACLE_HOME/rdbms/public
    And while linking i am using : $ORACLE_HOME/lib/*.so files.
    So I don't know whether my directory is missing some shared files related to ODCI : can any one please let me know which files or shared libraries I am missing :
    Below are list of files in my : $ORACLE_HOME/lib :
    custagg123.o libclntsh.so libdbcfg10.so libjox10.so libocci.so.10.1 liborasdkbase.so libskgxpd.so libunwind.so.5
    custagg.so libclntsh.so.10.1 libemmas10.so libldapjclnt10.so libocijdbc10.so liborasdkbase.so.10.2 libskgxpu.so libxdb.so
    facility.lis libclsra10.so libhasgen10.so libnjni10.so libocr10.so liborasdk.so libsqlplus.so shell.so
    hsdb_odbc.so libcorejava.so libheteroxa10.so libnjssl10.so libocrb10.so liborasdk.so.10.2 libsqora.so.10.1 sysliblist
    hsdb_ora.so libcoresh10.so libhsbase.so libnnz10.so libocrutl10.so libqsmashr.so libsrvm10.so
    lclasses12.zip libcprts.so.5 libhsnav.so libnque10.so libodm10.so libskgxn2.so libsrvmhas10.so
    libagtsh.so libcxa.so.3 libimf.so libntcpaio10.so libodmd10.so libskgxns.so libsrvmocr10.so
    libagtsh.so.1.0 libcxa.so.5 libirc.a libocci.so libons.so libskgxp10.so libuini10.so
    Please reply to my queries.
    Please let me know if you want to have a look at the symbols of my object file
    Thanks & Regards,
    -NN

    It's only a quick guess but have you checked your tnsnames.ora file to ensure you've opened the environment to find the libraries? If you set the EXTPROC_DLLS=ANY, you open the database to security issues but it should tell you if this cause because you can't access the library that contains the symbol.
    SID_LIST_CALLOUT_LISTENER =
    (SID_LIST =
    (SID_DESC =
    (SID_NAME = PLSExtProc)
    (ORACLE_HOME = <oracle_home_directory>)
    (PROGRAM = extproc)
    (ENV = "EXTPROC_DLLS=ONLY:
    <oracle_home_directory>/customlib/writestr1.so
    ,LD_LIBRARY_PATH=<oracle_home_directory>/lib")
    )

  • ORA-06521: PL/SQL: Error mapping function while writting into a text file

    Hi,
    I'm getting an errror ORA-06521: PL/SQL: Error mapping function while trying to write data into a text file.
    I'm using the following code:
    --To create a new directory
    create or replace directory temp as 'C:/temp';
    declare
                    l_str varchar2(1000);
                    output_file utl_file.file_type;
                    cursor test_write_cur is
                         select EMPNO,ENAME,JOB,SAL,HIREDATE
                           from EMP
                         where DEPTNO=30;
    begin
               output_file := utl_file.fopen('TEMP','TESTFILE.txt','w');
               for test_write_rec IN test_write_cur
               loop          
                l_str :=     test_write_rec.EMPNO||'^'||test_write_rec.ENAME||'^'||test_write_rec.JOB||'^'||
                         test_write_rec.HIREDATE||'^'||test_write_rec.SAL||chr(10);
                utl_file.put_line(output_file,l_str);
                     end loop;                                                                           
               utl_file.fclose(output_file);
    end;Please suggest me if i'm wrong.
    Thanks & Regards,
    Sanket Mishra

    Dear Sanket,
    I think you are need use TO_CHAR() function
      to_char(test_write_rec.EMPNO) ,
      to_char(test_write_rec.HIREDATE,'DD.MM.YYYY')
      to_char(test_write_rec.SAL)

Maybe you are looking for

  • Transaction variant for Goods Issue going back to MB1A transaction screen

    Hello, I have created a transaction variant ZMB1A for Goods issue. When the goods issue transaction completed by using ZMB1A system again going back to the initial screen of MB1A. (Since it is the base of MB1A) Here the issue is everytime user had to

  • Replacement hard disk for Satellite M30-604

    Having problems with my hard disk and want to change it. Believe original was a IC25N060ATMR04-0 which appears to be a Hitachi 4200rpm 60Gb UDMA drive with an 8 Meg buffer. Can I replace it with a larger, faster drive? If so what spec must I have? Gr

  • E71 shortcut key not working

    Hi, The shortcut key on the upper left corner of the panel (shorcut for camera by defualt) stopped working. I tried resetting the shorcuts, formatting the phone also. But none helps. awaiting response. Thanks Prons.

  • Can't connect to samba share via VPN

    Hello all, I am looking for an answer for few days now and still can't manage to fix it. I found two workarounds in the meantime, but it's not what I want! My case: Cisco vpn on one side and Mac vpn client (native). I can connect alright, can't only

  • How to disable a new FF feature

    https://blog.mozilla.org/futurereleases/2013/09/24/plugin-activation-in-firefox/ Firefox stable release, not aurora, as in the photo. about:config. click to play false. Since I hate this new plugin warning (I am using Noscript), I would be very grate