How to call a stored procedure with a REF CURSOR output parameter

I'm looking forward to example calling a function/stored procedure with a REF CURSOR output parameter and get the result.
In other words, I have a stored function/procedure that runs a SELECT statement using the OCI library and then he could get the values of each row and each column.

I put a code snippet, it have only the main thing to call a simple stored procedure and to print the name of each column of the cursor, but I couldn t to print out values in the table that calls the stored procedure.
I understand that the next step is to call an OCIStmtFetch.
How to associate the slider with the OCIStmtFetch?

If you need more information, just tell me.

I use ANSI C with HP - UX (HP - UX C) operating system and Oracle 10 g.


Kind regards.

Antonio Garcia


/ * callOracleSP * /.

#include < stdio.h >
#include < string.h >
#include < oci.h >
#include < stdlib.h > to

char * pConnectChar = "Server";
char * pUsernameChar = "user";
char * pPasswordChar = "passwd";
char * sqlCharArray1 = "BEGIN SP_GETCITIES (:,: c); END; « ;
int retval;
UB4 parmcnt = 0;
UB4 pos2 = 0;
text * pcoln [20];
UB4 namelen [20];
char state_key [5];

OCIStmt * pOciStatement;
OCIStmt * pOciStatCursor;
OCIError * pOciError;
OCIEnv * pOciEnviron;
OCIServer * pOciServer;
OCISession * pOciSession;
OCISvcCtx * pOciServiceContext;
OCIBind * pOciBind [500];
OCIParam * pOciParam;


int main()
{
retval = OCIEnvCreate (& pOciEnviron, OCI_DEFAULT, NULL, NULL, NULL, NULL, 0, NULL);
retval = OCIEnvInit (& pOciEnviron, OCI_DEFAULT, 0, NULL);
retval = OCIHandleAlloc (pOciEnviron, (void *) & pOciError, OCI_HTYPE_ERROR, 0, NULL);
retval = OCIHandleAlloc (pOciEnviron, (void *) & pOciServiceContext, OCI_HTYPE_SVCCTX, 0, NULL);
retval = OCIHandleAlloc (pOciEnviron, (void *) & pOciStatement, OCI_HTYPE_STMT, 0, NULL);

retval = OCILogon (pOciEnviron, pOciError, & pOciServiceContext,(unsigned char *) pUsernameChar,
strlen (pUsernameChar), (unsigned char *) pPasswordChar, strlen (pPasswordChar).
(unsigned char *) pConnectChar, strlen (pConnectChar));
printf ("retval=%d\n",retval OCILogon);

retval = OCIStmtPrepare (pOciStatement, pOciError, (unsigned char *) sqlCharArray1, strlen (sqlCharArray1),)
OCI_NTV_SYNTAX, OCI_DEFAULT);
printf ("StmtPrepare retval=%d\n",retval);

retval = OCIHandleAlloc (pOciEnviron, (void *) & pOciStatCursor, OCI_HTYPE_STMT, 0, NULL);
retval = 1 OCIBindByPos(pOciStatement,&pOciBind[0], pOciError, (ub4), (void *) & state_key,)
((sb4) sizeof (state_key), SQLT_STR, (void *) 0, (ub2 *) 0, (ub2 *) 0, (ub4) 0, (ub4 *) 0, OCI_DEFAULT (ub4));
printf ("BindByPos OCI_HTYPE_STMT retval=%d\n",retval);

retval = OCIBindByPos(pOciStatement,&pOciBind[1], pOciError, (ub4) 2, (void *) & pOciStatCursor,)
((sb4) 0, SQLT_RSET, (void *) 0, (ub2 *) 0, (ub2 *) 0, (ub4) 0, (ub4 *) 0, OCI_DEFAULT (ub4));
printf ("BindByPos OCI_HTYPE_STMT retval=%d\n",retval);

strcpy (state_key, 'ca');

retval = OCIStmtExecute (pOciServiceContext, pOciStatement, pOciError, (ub4) 1, (ub4) 0,)
(OCISnapshot *) NULL, (OCISnapshot *) NULL, OCI_DEFAULT (ub4));
printf ("StmtExecute retval=%d\n",retval);

/ * How to get the values of the cursor? */

/ * Number of parameters of the cursor * /.
OCIAttrGet ((void *) pOciStatCursor, OCI_HTYPE_STMT (ub4), (void *) & parmcnt,(ub4 *) 0,)
(ub4) (OCI_ATTR_PARAM_COUNT, pOciError);
printf ("\nNumber of the slider settings = %d\n",parmcnt);

for (int pos = 1; pos < = (int) parmcnt; pos ++)
{
OCIAttrGet ((void *) pOciStatCursor, OCI_HTYPE_STMT (ub4), (void *) & pos2,(ub4 *) 0,)
(ub4) (OCI_ATTR_CURRENT_POSITION, pOciError);
retval = OCIParamGet ((void *) pOciStatCursor, OCI_HTYPE_STMT (ub4), pOciError, (void *) & pOciParam,)
POS (ub4));
OCIAttrGet pOciParam, (ub4) ((void*) OCI_DTYPE_PARAM,(void*) & pcoln [pos - 1],(ub4 *) & namelen [pos-1],)
(ub4) OCI_ATTR_NAME,(OCIError *) pOciError);
}
for (int i = 1; i < = (int) parmcnt; i ++)
printf ("%i\tNAME = % column. ("* s\n", i, namelen [i-1], pcoln [i-1]);

return 0;
}


This is the script that create the table, insert records and create the stored procedure

CREATE TABLE CITIES)
STATE_CODE VARCHAR2 (2) NULL,
CITY_CODE NUMBER (15.5) NULL,
CITY_NAME VARCHAR2 (30) NULL
)
/


INSERT INTO CITIES (STATE_CODE, CITY_CODE, CITY_NAME)
VALUES ('CA', 30, 'SAN DIEGO')
/
INSERT INTO CITIES (STATE_CODE, CITY_CODE, CITY_NAME)
VALUES ('CA', 40 'SACRAMENTO')
/
INSERT INTO CITIES (STATE_CODE, CITY_CODE, CITY_NAME)
VALUES ('FL', 10, 'MIAMI')
/
INSERT INTO CITIES (STATE_CODE, CITY_CODE, CITY_NAME)
VALUES ('FL', 20, 'ORLANDO')
/
INSERT INTO CITIES (STATE_CODE, CITY_CODE, CITY_NAME)
VALUES ('NEW YORK', 10, 'NEW YORK')
/
INSERT INTO CITIES (STATE_CODE, CITY_CODE, CITY_NAME)
VALUES ('NEW YORK', 20, 'ALBANY')
/
INSERT INTO CITIES (STATE_CODE, CITY_CODE, CITY_NAME)
VALUES ('CA', 10, 'LOS ANGELES')
/
INSERT INTO CITIES (STATE_CODE, CITY_CODE, CITY_NAME)
VALUES ('CA', 20, 'SAN FRANCISCO')
/


CREATE or REPLACE PACKAGE globalPkg AUTHID CURRENT_USER AS
/ * The following is specific global variables T/SQL. */
TYPE RCT1 IS REF CURSOR; / * new cursor low definition * /.
END globalPkg;
/



CREATE OR REPLACE PROCEDURE SP_ADDCITY)
P_STATE_CODE IN VARCHAR,
P_CITY_CODE NUMBER,
P_CITY_NAME IN VARCHAR2,
P_RETURN IN NUMBERS)
AS
StoO_error INTEGER;
StoO_selcnt INTEGER;
StoO_rowcnt INTEGER;
StoO_errmsg VARCHAR2 (255);

BEGIN
StoO_rowcnt: = 0;
StoO_error: = 0;
StoO_selcnt: = 0;
P_RETURN: = 0;
INSERT INTO CITIES (STATE_CODE, CITY_CODE, CITY_NAME)
VALUES (P_STATE_CODE, P_CITY_CODE, P_CITY_NAME);
StoO_rowcnt: = number of LINES SQL %;
EXCEPTION
WHEN TOO_MANY_ROWS THEN
StoO_rowcnt: = 2;
WHILE OTHERS THEN
StoO_rowcnt: = 0;
StoO_selcnt: = 0;
StoO_error: = SQLCODE;
StoO_errmsg: = SQLERRM;
IF StoO_error! = 0 THEN
BEGIN
P_RETURN: = 1;
RETURN;
END;
END IF;
END;
/

CREATE OR REPLACE PROCEDURE SP_GETCITIES)
STATE_KEY IN VARCHAR,
RC1 IN OUT globalPkg.RCT1)
AS
StoO_error INTEGER;
StoO_selcnt INTEGER;
StoO_rowcnt INTEGER;
StoO_errmsg VARCHAR2 (255);
BEGIN
StoO_rowcnt: = 0;
StoO_error: = 0;
StoO_selcnt: = 0;
OPEN FOR RC1
SELECT STATE_CODE, CITY_CODE, FRANCISCO
CITIES
WHERE STATE_CODE = STATE_KEY
ORDER BY CITY_CODE;
StoO_rowcnt: = number of LINES SQL %;
EXCEPTION
WHILE OTHERS THEN
StoO_rowcnt: = 0;
StoO_error: = SQLCODE;
StoO_errmsg: = SQLERRM;
END;
/

Hi Antonio,.

I see this:

c_buf=(ub1 **)calloc(sizeof(ub1 *),3);

...

rc=OCIDefineByPos(pOciStatCursor,&pdef,(OCIError *)pOciError,pos,c_buf[pos-1],size+1,(ub2)type,(dvoid *)c_indp[pos-1],(ub2 *)0,(ub2 *)0,OCI_DEFAULT);

That I don't understand. You allocate space for 3 pointers ub1 but I don't see where these pointers are then initialized to point to where the data is to be stored.

I do not read correctly?

Sorry for posting code long, but here is an example of code that I have. It is much more 'code' for your code, but maybe that will be enough...

NOTE: This is just the code example and not rigorous. For example, I don't check the memory, allocations etc in this code!

Kind regards

Mark

#ifdef WIN32
#define _CRT_SECURE_NO_DEPRECATE 1
#endif

#include 
#include 
#include 
#include 

void checkerr(sword status, OCIError *errhp);

int main(int argc, char *argv[]) {
  OCIEnv      *envhp = NULL;  /* OCI Environment handle     */
  OCIError    *errhp = NULL;  /* OCI Error handle           */
  OCISvcCtx   *svchp = NULL;  /* OCI Service Context handle */
  OCIServer   *srvhp = NULL;  /* OCI Server handle          */
  OCISession  *usrhp = NULL;  /* OCI User Session handle    */

  OCIStmt     *stmtp = NULL;  /* OCI Statement handle       */
  OCIStmt     *cursr = NULL;  /* OCI Statement handle       */

  OCIParam    *prmp1 = NULL;  /* OCI Parameter handle       */
  OCIParam    *prmp2 = NULL;  /* OCI Parameter handle       */
  OCIParam    *prmp3 = NULL;  /* OCI Parameter handle       */

  OCIDefine   *defp1 = NULL;  /* OCI Define handle          */
  OCIDefine   *defp2 = NULL;  /* OCI Define handle          */
  OCIDefine   *defp3 = NULL;  /* OCI Define handle          */

  OCIBind     *bndp1 = NULL;  /* OCI Bind handle            */
  OCIBind     *bndp2 = NULL;  /* OCI Bind handle            */
  OCIBind     *bndp3 = NULL;  /* OCI Bind handle            */

  /* used to hold column width */
  ub2 col_width;

  /* used to set the prefetch count */
  ub4 prefetch_count = 32;

  /* will hold output from database */
  oratext *pEmpId = NULL;
  oratext *pFirstName = NULL;
  oratext *pLastName = NULL;

  /* the anonymous block to execute */
  /* this opens a ref cursor        */
  oratext *sqlstmt = "begin " \
                     "  open :1 for " \
                     "  select   to_char(employee_id), " \
                     "           first_name, " \
                     "           last_name " \
                     "  from     hr.employees " \
                     "  order by last_name, " \
                     "           first_name; " \
                     "end;";

  /* used to hold the results of each OCI call */
  sword result = 0;

  /* Initialize and create a default environment  */
  result = OCIEnvCreate(&envhp,
                        OCI_DEFAULT,
                        (dvoid *) 0,
                        0,
                        0,
                        0,
                        (size_t) 0,
                        (dvoid **) 0);

  /* allocate an error handle */
  result = OCIHandleAlloc((dvoid *) envhp,
                          (dvoid **) &errhp,
                          OCI_HTYPE_ERROR,
                          0,
                          (dvoid **) 0);

  /* allocate a service context handle */
  result = OCIHandleAlloc((dvoid *) envhp,
                          (dvoid **) &svchp,
                          OCI_HTYPE_SVCCTX,
                          0,
                          (dvoid **) 0);

  /* allocate a server handle */
  result = OCIHandleAlloc((dvoid *) envhp,
                          (dvoid **) &srvhp,
                          OCI_HTYPE_SERVER,
                          0,
                          (dvoid **) 0);

  /* allocate a user session handle */
  result = OCIHandleAlloc((dvoid *) envhp,
                          (dvoid **) &usrhp,
                          OCI_HTYPE_SESSION,
                          0,
                          (dvoid **) 0);

  /* create a server context using the "ORADEMO" database */
  result = OCIServerAttach(srvhp,
                           errhp,
                           "ORADEMO",
                           (ub4) strlen("ORADEMO"),
                           OCI_DEFAULT);

  /* set the server attribute in the service context handle */
  result = OCIAttrSet((dvoid *) svchp,
                      OCI_HTYPE_SVCCTX,
                      (dvoid *) srvhp,
                      (ub4) 0,
                      OCI_ATTR_SERVER,
                      errhp);

  /* open the session with the database */
  /* using external authentication      */
  result = OCISessionBegin(svchp,
                           errhp,
                           usrhp,
                           OCI_CRED_EXT,
                           OCI_DEFAULT);

  /* set the user session attribute in the service context handle */
  result = OCIAttrSet((dvoid *) svchp,
                      OCI_HTYPE_SVCCTX,
                      (dvoid *) usrhp,
                      (ub4) 0,
                      OCI_ATTR_SESSION,
                      errhp);

  /* allocate the statement handle */
  result = OCIHandleAlloc((dvoid *) envhp,
                          (dvoid **) &stmtp,
                          OCI_HTYPE_STMT,
                          0,
                          (dvoid **) 0);

  /* prepare the statement for execution */
  result = OCIStmtPrepare(stmtp,
                          errhp,
                          sqlstmt,
                          (ub4) strlen((char *) sqlstmt),
                          OCI_NTV_SYNTAX,
                          OCI_DEFAULT);

  /* allocate the handle for the ref cursor */
  result = OCIHandleAlloc((dvoid *) envhp,
                          (void **) &cursr,
                          OCI_HTYPE_STMT,
                          0,
                          NULL);

  /* bind the ref cursor parameter */
  result = OCIBindByPos(stmtp,
                        &bndp1,
                        errhp,
                        1,
                        &cursr,
                        0,
                        SQLT_RSET,
                        NULL,
                        0,
                        NULL,
                        0,
                        0,
                        OCI_DEFAULT);

  /* execute the statement */
  result = OCIStmtExecute(svchp,
                          stmtp,
                          errhp,
                          1,
                          0,
                          NULL,
                          NULL,
                          OCI_DEFAULT);  

  /* get parameter descriptor for first column */
  result = OCIParamGet((dvoid *) cursr,
                       OCI_HTYPE_STMT,
                       errhp,
                       (dvoid **) &prmp1,
                       (ub4) 1);

  /* get parameter descriptor for second column */
  result = OCIParamGet((dvoid *) cursr,
                       OCI_HTYPE_STMT,
                       errhp,
                       (dvoid **) &prmp2,
                       (ub4) 2);

  /* get parameter descriptor for third column */
  result = OCIParamGet((dvoid *) cursr,
                       OCI_HTYPE_STMT,
                       errhp,
                       (dvoid **) &prmp3,
                       (ub4) 3);

  /* get the first column width in characters */
  result = OCIAttrGet((dvoid*) prmp1,
                      (ub4) OCI_DTYPE_PARAM,
                      (dvoid*) &col_width,
                      (ub4 *) 0,
                      (ub4) OCI_ATTR_DATA_SIZE,
                      errhp);

  /* allocate memory to hold the result */
  pEmpId = (oratext *) malloc(sizeof(oratext) * (col_width + 1));

  /* define the first column in the results */
  result = OCIDefineByPos(cursr,
                          &defp1,
                          errhp,
                          1,
                          (dvoid *) pEmpId,
                          (sword) col_width + 1,
                          SQLT_STR,
                          (dvoid *) NULL,
                          (ub2 *) 0,
                          (ub2 *) 0,
                          OCI_DEFAULT);

  /* get the second column width in characters */
  result = OCIAttrGet((dvoid*) prmp2,
                      (ub4) OCI_DTYPE_PARAM,
                      (dvoid*) &col_width,
                      (ub4 *) 0,
                      (ub4) OCI_ATTR_DATA_SIZE,
                      errhp);

  /* allocate memory to hold the result */
  pFirstName = (oratext *) malloc(sizeof(oratext) * (col_width + 1));

  /* define the second column in the results */
  result = OCIDefineByPos(cursr,
                          &defp2,
                          errhp,
                          2,
                          (dvoid *) pFirstName,
                          (sword) col_width + 1,
                          SQLT_STR,
                          (dvoid *) NULL,
                          (ub2 *) 0,
                          (ub2 *) 0,
                          OCI_DEFAULT);

  /* get the third column width in characters */
  result = OCIAttrGet((dvoid*) prmp3,
                      (ub4) OCI_DTYPE_PARAM,
                      (dvoid*) &col_width,
                      (ub4 *) 0,
                      (ub4) OCI_ATTR_DATA_SIZE,
                      errhp);

  /* allocate memory to hold the result */
  pLastName = (oratext *) malloc(sizeof(oratext) * (col_width + 1));

  /* define the third column in the results */
  result = OCIDefineByPos(cursr,
                          &defp3,
                          errhp,
                          3,
                          (dvoid *) pLastName,
                          (sword) col_width + 1,
                          SQLT_STR,
                          (dvoid *) NULL,
                          (ub2 *) 0,
                          (ub2 *) 0,
                          OCI_DEFAULT);

  /* loop through and print the results */
  while ((result = OCIStmtFetch(cursr,
                                errhp,
                                (ub4) 1,
                                (ub2) OCI_FETCH_NEXT,
                                (ub4) OCI_DEFAULT)) == OCI_SUCCESS)
  {
    printf("Employee ID: %s\n", pEmpId);
    printf(" First Name: %s\n", pFirstName);
    printf("  Last Name: %s\n\n", pLastName);
  }

  /* free allocated memory */
  free(pEmpId);
  free(pFirstName);
  free(pLastName);

  pEmpId = NULL;
  pFirstName = NULL;
  pLastName = NULL;

  /* terminate the session with the database */
  result = OCISessionEnd(svchp, errhp, usrhp, OCI_DEFAULT);

  /* detach from the server */
  result = OCIServerDetach(srvhp, errhp, OCI_DEFAULT);

  /* deallocate the environment handle     */
  /* OCI will deallocate the child handles */
  result = OCIHandleFree((dvoid *) envhp, OCI_HTYPE_ENV);

  return OCI_SUCCESS;
}

void checkerr(sword status, OCIError *errhp)
{
  oratext errbuf[512];
  sb4 errcode = 0;

  switch (status) {
    case OCI_SUCCESS:
      break;

    case OCI_ERROR:
    case OCI_SUCCESS_WITH_INFO:
      (void) OCIErrorGet((dvoid *) errhp, (ub4) 1, (oratext *) NULL, &errcode, errbuf, (ub4) sizeof(errbuf), OCI_HTYPE_ERROR);
      (void) printf("Error: %.*s\n", sizeof(errbuf), errbuf);
      break;

    case OCI_NEED_DATA:
      (void) printf("Error - OCI_NEED_DATA\n");
      break;

    case OCI_NO_DATA:
      (void) printf("Error - OCI_NO_DATA\n");
      break;

    case OCI_INVALID_HANDLE:
      (void) printf("Error - OCI_INVALID_HANDLE\n");
      break;

    case OCI_STILL_EXECUTING:
      (void) printf("Error - OCI_STILL_EXECUTING\n");
      break;

    case OCI_CONTINUE:
      (void) printf("Error - OCI_CONTINUE\n");
      break;

    default:
      break;
  }
}

Tags: Database

Similar Questions

  • How to call oracle stored procedure with hibernate

    Hi all
    I wrote the following stored procedure:

    create or replace
    PROCEDURE SP_GET_NUMBER (p_cursor sys_refcursor, departmentId in number, userId in number, documentTypeId number)
    as
    Enter the integer;
    sqlScript varchar2 (60);
    Start
    sqlScript: = "select registrationnumber_seq.nextval from dual;
    immediately run sqlScript in register;
    dbms_output.put_line ('Nextval is: ' |) To_char (Regid));
    insert into roketsanuser.registrationnumbers
    (id, departmentid, documenttypeid, number, registrationstatus, status, updatedate, updateuserid, version)
    values
    (enter it, null, null, enter it, 0, 0, sysdate, 0, 0);
    commit;
    Open the p_cursor for
    Select id
    roketsanuser.registrationnumbers® systems
    where reg.id = regid;
    end;

    And I define in the annotations in my entity class:

    @Entity (name = "Number")
    @Table (name = "REGISTRATIONNUMBERS")
    @SequenceGenerator (name = "REGISTRATIONNUMBER_SEQ", sequenceName = "REGISTRATIONNUMBER_SEQ")
    @org.hibernate.annotations.NamedNativeQuery (name = "SP_GET_NUMBER", query = "{call? "{= SP_GET_NUMBER (: departmentId,: userId,: documentTypeId)}"
    Callable = true, readOnly = true, resultClass = RegistrationNumber.class)
    @EntityListeners ({BaseEntityListener.class})
    Number/public class extends BaseEntity

    I call the query in my Dao class:

    public number getNumberForIncomingPaperworkByStoredProcedure (EntityManager Manager, number number)
    {
    A session = (Session) manager.getDelegate ();
    query org.hibernate.impl.SQLQueryImpl = (SQLQueryImpl) session.getNamedQuery ("SP_GET_NUMBER");

    query.setParameter ("departmentId", ObjectUtil.isNotNull (registrationNumber.getDepartment ())? registrationNumber.getDepartment () .getId (): "");
    query.setParameter ("userId", ObjectUtil.isNotNull (registrationNumber.getUser ())? registrationNumber.getUser () .getId (): "");
    query.setParameter ("documentTypeId", ObjectUtil.isNotNull (registrationNumber.getDocumentType ())? registrationNumber.getDocumentType () .getId (): "");
    Collection list = query.list ();
    return new RegistrationNumber();
    }

    But when I run the application exception occurred:
    < 01/02/2013 10:04:24 EET > < opinion > < Stdout > < BEA-000000 > < hibernation:
    / * name of SP_GET_NUMBER native SQL query * / {call? = SP_GET_NUMBER (?,?,?)} >
    < 01/02/2013 10:04:27 EET > < opinion > < Stdout > < BEA-000000 > < 10:04:27, 811 ERROR [IncomingPaperworkMBean] EJB Exception:; nested exception is:
    org.hibernate.exception.SQLGrammarException: could not execute the query. nested exception is: org.hibernate.exception.SQLGrammarException: could not execute the query >

    This is perhaps the reason why, please help me?

    Thanks in advance

    Message to research in syntax of:

    @org.hibernate.annotations.NamedNativeQuery

    It seems that following is a possible cause (but I'm not sure about this one):

    Query = "{call?" "{= SP_GET_NUMBER (: departmentId,: userId,: documentTypeId)} '.

    You can change this:

    Query = "(?)". (= appeler SP_GET_NUMBER (: departmentId,: userId,: documentTypeId)) "...

    or

    Query = "(call SP_GET_NUMBER (: departmentId,: userId,: documentTypeId)).

    and check if that helps...

    You can take a look at:

    https://Forum.Hibernate.org/viewtopic.php?p=2401604

    HTH,

    Bravo!
    AJ

  • How to call a stored procedure in ADF

    How to call a stored procedure in the ADF (Jdev 11.1.1.6)?

    Code sample stored procedure:

    CREATE or REPLACE PROCEDURE SP_HELLOWORLD

    (

    NAME IN VARCHAR2

    OUT VARCHAR2 DESIRES

    ) AS

    BEGIN

    WISHES: = 'Hello'. name | ', Welcome to MS.';

    END SP_HELLOWORLD;

    Your Code of ADF is:

    try {}

    System.out.println ("* beginning of the code *");

    String sql = "start SP_HELLOWORLD(:NAME,:WISHES); end; ";

    CallableStatement st = getDBTransaction () .createCallableStatement (sql, getDBTransaction(). DEFAULT VALUE);

    st.setObject ("NAME", "ABC"); Replace with required param

    st.registerOutParameter ("WISHES", Types.VARCHAR); import java.sql.Types;

    St.Execute ();

    System.out.println ("the output of the function DB is:" + st.getObject ("WISHES"));

    System.out.println ("* end of code *");

    } catch (Exception e) {e.printStackTrace () ;}

  • Simple question-how to call a stored procedure or function of apex?

    Simple question-how to call a stored procedure or function of apex?
    Thanks advance.
    Doug

    Hi Doug,.
    You can call a procedure or function of apex. It depends on what you want to do with the function or procedure. If you want to retrieve table data in a specific area, you can try something like this-

    The following statement creates the function get_bal on the oe.orders of sample table (PL/SQL is in italics):

    CREATE FUNCTION get_bal (acc_no in NUMBER)
    RETURN NUMBER
    IS acc_bal NUMBER (11.2);
    BEGIN
    SELECT order_total
    IN acc_bal
    Orders
    WHERE customer_id = acc_no;
    Return (acc_bal);
    END;
    /

    The function created in the previous example can be used in a SQL statement. For example:

    SELECT get_bal (165) FROM DUAL;

    GET_BAL (165)
    ------------
    2519

    hope this will help,

    Kind regards

    Pascal M
    http://Tajuddin.whitepagesbd.com

  • How to execute a stored procedure that returns a cursor?

    How to execute a stored procedure that returns a cursor?

    Follow the code:

    CREATE OR REPLACE PROCEDURE stp_cashin_grupo
    (p_func in VARCHAR
    p_cod_grup in full
    p_des_grup in VARCHAR
    p_logi in VARCHAR
    p_curs_rset ON infoc.pck_cashin_grupo.curs_rset
    )
    IS
    BEGIN

    If p_func = "1" then
    OPEN FOR P_curs_rset
    Select
    cod_grup
    des_grup
    dat_manu_grup
    des_logi_manu
    of infoc.tbl_cashin_grupo
    order of des_grup;
    end if;
    END stp_cashin_grupo;


    and packaging:

    CREATE or REPLACE PACKAGE pck_cashin_grupo
    AS
    TYPE curs_rset IS REF CURSOR;
    END pck_cashin_grupo;

    My question is how to execute in sql plus?
    Stp_cashin_grupo EXEC ('1', 0, ", '465990', my doubt is how to move the cursor as return)


    Thank you

    It is described in the manual

    http://download.Oracle.com/docs/CD/B19306_01/server.102/b14357/CH5.htm#sthref1122

  • Calling stored procedure with an input of DATE parameter

    Hello. A question about the Date input parameters when you call a stored procedure.

    I have a procedure that takes a DATE as input parameter. I would DATE this value to include a time element.

    My Application Module method takes an input as a java.util.Date (myParamDate) parameter - that will preserve a time element (?).

    However when I create the CallableStatement, I am trying to set the parameter using setDate like this (for the param 5):
                st = getDBTransaction().createCallableStatement("begin cs_my_pck.request_values(?,?,?,?,?,?,?,?); end;", 0);            
                Connection myConn = st.getConnection();
                ArrayDescriptor myArrDesc  =  ArrayDescriptor.createDescriptor("CS_FIELD_TABT", myConn);
                Array sqlParamNameArray = new oracle.sql.ARRAY(myArrDesc, myConn, paramNames.toArray());
                Array sqlParamValueArray = new oracle.sql.ARRAY(myArrDesc, myConn, paramValues.toArray());
                Array sqlFilterNameArray = new oracle.sql.ARRAY(myArrDesc,myConn,filterNames.toArray());
                    
                st.setString(1, repType);
                st.setObject(2, sqlParamNameArray);
                st.setObject(3,sqlParamValueArray);
                st.setObject(4,sqlFilterNameArray);
    
                java.sql.Date myRepDate = new java.sql.Date(myParamDate.getTime());
    
                st.setDate(5,myRepDate);
                
                System.out.println("Report Date = " + myRepDate.toString());
                st.setString(6,repUser);
                st.setString(7,repAttach);
                // set out param
                st.registerOutParameter(8, Types.NUMERIC);
                st.execute();
    I understand java.sql.Date does NOT include a time element. But setDate() only accepts a java.sql.Date so my parameter of the procedure ends with a zero time element.

    How to call this procedure keeping the time element?

    Thank you.

    It includes the time element, if you want more precision with time stamp.

    http://docs.Oracle.com/javase/6/docs/API/Java/SQL/date.html

  • How to call the stored procedure from javascript? (Google suggest, AJAX)

    Hi I want to set up a text field so that it behaves like [Google Suggest | http://www.google.com/webhp?complete=1 & hl = en].

    I read this post .

    Now, I installed everything according to this document. But it simply doesn't. And I don't know why.

    I think that problems can fall into the following three categories:
    1. the text field and the page invoking the appropriate javascript?
    2 - is the JavaScript call the stored procedure?
    3. the stored procedure correctly returns the result formatted?

    I'm assertive for 1 and 3, but I'm not sure 2. Because I don't know how if a stored procedure has been called? Is there a PL/SQL statement that I can query in SQL * more?

    Also, I would like to know how to debug AJAX in the APEX. It involves a lot of things.

    Finally, I used APEX 3.2 and Oracle XE. I can't find file dads.conf or marvel.conf. Is ' / apex / "the virtual directory for APEX?

    Thank you very much!

    Buffalo,

    I managed to make it work on XE with APEX 3.2!
    It took more time than expected because my XE installation was still on an earlier version of the Apex and I had put it first...

    But that's what I did:
    -in the ac.js file, I changed the path ' / apex / "and I added the ac.js file to my candidacy as a static file. So as you did.
    -J' copied my request to the XE and copied my procedure on the schema that is related to my request
    -J' gave to run anonymous rights my procedure

    Now at first, it did not work...
    Then I suddenly remembered something: If you want to run a procedure through the pl/sql gateway in the XE, XE please how it is.
    Do you this by changing the APEX_030200.wwv_flow_epg_include_mod_local function!

    This is the code for the function changed for my example:

    CREATE OR REPLACE function APEX_030200.wwv_flow_epg_include_mod_local(
        procedure_name in varchar2)
    return boolean
    is
    begin
        --return false; -- remove this statement when you modify this function
        --
        -- Administrator note: the procedure_name input parameter may be in the format:
        --
        --    procedure
        --    schema.procedure
        --    package.procedure
        --    schema.package.procedure
        --
        -- If the expected input parameter is a procedure name only, the IN list code shown below
        -- can be modified to itemize the expected procedure names. Otherwise you must parse the
        -- procedure_name parameter and replace the simple code below with code that will evaluate
        -- all of the cases listed above.
        --
        if upper(procedure_name) in (
              'MATTHIASH.INCSEARCH') then
            return TRUE;
        else
            return FALSE;
        end if;
    end wwv_flow_epg_include_mod_local;
    /
    

    After that, the AJAX function worked as expected...

    HTH
    Matthias Hoys

    Published by: mhoys on August 13, 2009 15:24

  • How to call a stored procedure PL/SQL of the Disqualification?

    I figured I could do this from a Groovy script but I am unable to make it work.

    Let's take the simplest scenario:

    At the end of a job, I have a need to call an once stored procedure that has no arguments.

    Translated by the logic of the stored procedure with Disqualification is not an option.

    If you must call it once at the end of a task, you must use the external task.

    If you call a procedure for each record, it can be done using a script.

  • How to call a stored procedure stored procedure

    Hello Experts,

    I need help, even if stored procedures. I tried to know without a bit of luck. Is it possible to call the stored procedure to another stored procedure? The problem is my boss want me to work on a stored procedure, but I do not have the appropriate privileges. He won't give me permissions either. He suggested that to a stored procedure and call this stored procedure after creating a new procedure. Is this possible? If Yes, how can I do it?

    I thank in advance

    ascheffer wrote:
    Without the "privileges", whatever it is, your features in other nesting procedures won't help.

    Anton

    Unless...

    It goes to an anonymous PL/SQL block to allow him to test its procedures. ;)

    SQL> ed
    Wrote file afiedt.buf
    
      1  declare
      2    procedure test_proc(p_var IN VARCHAR2) is
      3    begin
      4      dbms_output.put_line(p_var);
      5    end;
      6  begin
      7    test_proc('This is a test proc');
      8* end;
    SQL> /
    This is a test proc
    
    PL/SQL procedure successfully completed.
    
    SQL>
    
  • call a stored procedure with OUT VARCHAR2 parameter fails

    Hi all

    I use the Oracle 11.2.0.1 version OLE DB provider. I have a simple stored procedure that contains a VARCHAR2 OUT parameter:

    create or replace procedure TestOut (RESULT_CODE OUT VARCHAR2) is
    Start
    RESULT_CODE: = 'X '.
    TestOut end;

    The following c# code piece fails:

    String ConnStr = "Provider = OraOLEDB.Oracle; User ID = test; Password = test; Data Source = sandbox; « ;
    OleDbConnection Conn = new OleDbConnection (ConnStr);
    Conn.Open ();
    OleDbCommand Cmd new OleDbCommand();
    Cmd.Connection = Conn;
    OleDbParameter Param = Cmd.CreateParameter ();
    Param.ParameterName = "RESULT_CODE ';
    Param.Direction = System.Data.ParameterDirection.Output;
    Param.OleDbType = OleDbType.BSTR;
    Param.Size = 1;
    Cmd.Parameters.Add (Param);

    Cmd.CommandType = System.Data.CommandType.Text.
    Cmd.CommandText = "{TESTOUT (?). CALL} ";
    Cmd.ExecuteNonQuery ();

    If the stored procedure is modified to contain an OUT parameter, the same code works, after you change the type of parameter to appropriate OleDBType (OleDbType.SmallInt).

    What am I doing wrong when handling OUTPUT VARCHAR parameters? Y at - there any limitation on the types of parameters stored procedure using the Oracle OleDB provider?

    Published by: user957565 on 1/Ago/2011 06:31

    I get an access violation, using 11202. What do you get?

    In any case, it works fine for me using OleDbType.VarChar instead of OleDbType.BSTR.

    Hope this helps, comments welcome.

    Greg

  • How to call a stored procedure accepts VARIABLE in run

    Hello

    CREATE OR REPLACE PROCEDURE getEmpName
    * (EMP_UNAME IN VARCHAR, EMP_PWD VARCHAR OUT) *.
    IS
    BEGIN
    SELECT PASS IN EMP_PWD
    USERS
    WHERE NAME = EMP_UNAME;
    END;

    How call this stored using the execute procedure, I tried to run getEmpName('Sai'); and I myself
    ERROR on line 1:
    ORA-06550: line 1, column 7:
    PLS-00306: wrong number or types of arguments in the call to 'GETEMPNAME '.
    ORA-06550: line 1, column 7:
    PL/SQL: Statement ignored

    The Sybrand & Tyro two examples show the declaration of the variable, i.e.

    SQL> variable ename varchar2(100);
    

    You must do it before SQL * Plus could know how to solve: ename in your call.

    Justin

  • C# Oracle.DataAccess calling a stored procedure with a date parameter throws formatexception

    C# Oracle.DataAccess CommandType.StoredProcedure is OracleDbType. Date

    I can't get my code to call an oracle procedure that has an order date.

    I receive a System.FormatException occurred in Oracle.DataAccess.dll

    I tried to assign the param. Value = DateTime and also tried assigning as a string formatted with no luck.

    What is the magic formula, I need to call this function?

    Here is a code snippet:

    OracleCommand cmd = new OracleCommand();

    cmd connection group appConn;.

    cmd.CommandText = "mypackage.myprocedure";

    cmd.CommandType = CommandType.StoredProcedure;

    Param = new OracleParameter ("iDateParamter", OracleDbType.Date, ParameterDirection.Input);

    Param. Value = "August 31, 2015."

    Here are other formats I' tried... ved param. Value = myDateValue.ToString ("dd - MMM-yyyy"). ToUpper(); (/ / "MM/dd/yyyy"); 'YYYY-MM-dd'); "MM-dd-yyyy");

    cmd. Parameters.Add (param);

                BindByName. cmd = true;

                cmd ExecuteNonQuery());

    Shame on me..., you can close this message

    It was not for the error on my date field, I had another parameter that has been attributed to a string instead of an integer.

    For the record, this has worked well for me:

    Param = new OracleParameter ("iActvyPerDate", OracleDbType.Date, ParameterDirection.Input);

    Param. Value = li. ActvyPerDate.ToString ("dd-MMM-yyyy"). ToUpper();

  • How to call the stored procedure when I press the button

    Hello

    I want to know how to call the procedure/SQL statement when I press the button using callable statement.

    can someone give me it please link who knows the steps to do this.

    Thanks in advance,
    SAN

    Hello

    read this good example http://www.baigzeeshan.com/2010/05/calling-plsql-procedure-and-function-in.html

    ~ Abhijit

  • Problems calling a stored procedure with DG4IFMX

    Hi guys,.

    I try to call stored procedures of database Informix, which is connected by an Oracle for Informix database gateway.

    I ran select, update, delete correctly but when I try to execute a stored procedure, that nothing is happening.

    for example:
    When I run
    call branko"@link_informix (1) «»

    It returns that it is performed successfully, without error, but as you can see below no entry is entered in the branko_test table

    to informix:

    drop the branko procedure;
    Create procedure "informix".branko (integer _vlez)
    returning a Boolean;
    If _vlez = 1 then
    insert into branko_test values ('uspesen test', '1');
    on the other
    insert into branko_test values ('test 2 ', 2' uspesen);

    end if;
    end of procedure;

    the procedure runs ok when called to informix.

    Thanks for any help

    P.S I even tried running:

    declare
    Whole RET;
    Start
    RET: = DBMS_HS_PASSTHROUGH. EXECUTE_IMMEDIATE@link_informix (' branko procedure (2)');
    end;

    but the same thing happens, no entry in the branko_test table.

    Find the root cause:
    When you are using dbaccess to call the original procedure it displays on the screen (expression)
    => remove the return value as it is not managed

    -> looks like not supported return Boolean value. Changes to the procedure of

    drop the branko procedure;
    Create procedure "informix".branko (integer _vlez)

    If _vlez = 1 then
    insert into branko_test values ('uspesen test', '1');
    on the other
    insert into branko_test values ('test 2 ', 2' uspesen);

    end if;
    end of procedure;

    allows me to execute the procedure using passthrough
    DECLARE
    result VARCHAR2 (50);
    BEGIN
    result: = DBMS_HS_PASSTHROUGH. EXECUTE_IMMEDIATE@dg4ifmx (' run the informix.branko procedure (1)');
    END;
    /

    Edited by: kgronau may 6, 2011 07:31

  • How to run a procedure with the object as OUTPUT parameter

    Hello

    I have a procedure and it composed of 2 parameters, there is an input parameter and it's some ID (NUMBER datatype) and 2nd parameter is an output parameter and it an object type. I want to run this procedure, but not able to do the same thing. Can someone please suggest me how to run a procedure that got the object as output parameter.

    Thank you very much in advance for your support.

    Example:

    SQL> create or replace type t_obj as object (ename varchar2(10), deptno number);
      2  /
    
    Type created.
    
    SQL> ed
    Wrote file afiedt.buf
    
      1  create or replace procedure myproc (p_empno in number, obj out t_obj) is
      2  begin
      3    select t_obj(ename, deptno)
      4    into obj
      5    from emp
      6    where empno = p_empno;
      7* end;
    SQL> /
    
    Procedure created.
    
    SQL> set serverout on
    SQL> declare
      2    v_obj t_obj;
      3  begin
      4    myproc(7788, v_obj);
      5    dbms_output.put_line(v_obj.ename||','||v_obj.deptno);
      6  end;
      7  /
    SCOTT,20
    
    PL/SQL procedure successfully completed.
    

Maybe you are looking for