Oracle FAQ Your Portal to the Oracle Knowledge Grid
HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US
 

Home -> Community -> Usenet -> c.d.o.server -> Passing parameter from C to stored procedure.

Passing parameter from C to stored procedure.

From: <jeffwyant_at_my-deja.com>
Date: Tue, 30 Nov 1999 19:28:36 GMT
Message-ID: <8218gt$tev$1@nnrp1.deja.com>


I am having trouble passing a string from C to an Oracle stored procedure. I am using the Pro*c pre-compiler, but I am unable to pass more than 255 characters to the Oracle stored procedure. Is this the limit or is there a way to pass more than 255 characters. Below is a sample of my code.

#include <stdio.h>
#include <string.h>

#include "HP_common.h"
#include "HP_oracle.h"

#define ORACLE_RPC_INSERT "rpcfacts"
#define SUCCEED 1
#define BUFF_SIZE_OF_MSG 400

EXEC SQL INCLUDE sqlca.h;

typedef char asciz[20];
typedef char vc2_arr[11];

EXEC SQL BEGIN DECLARE SECTION; /* user defined type for NULL terminated strings */ EXEC SQL TYPE asciz IS STRING(20) REFERENCE;

/*User defined type for a VARCHAR array element */ EXEC SQL TYPE vc2_arr IS VARCHAR2(11) REFERENCE;

asciz username;
asciz password;
char param1[BUFF_SIZE_OF_MSG];

EXEC SQL END DECLARE SECTION; long SQLCODE;

void sql_error (); /* Error handler */

int HP_open_database(char * user, char * passwd, char * server, char * db)
{
/*
connect to ORACLE.
*/
EXEC SQL WHENEVER SQLERROR DO sql_error(); strcpy ( username, user );
strcpy ( password, passwd );

EXEC SQL CONNECT :username IDENTIFIED BY :password; printf ( "\nConnected to ORACLE database as user: %s , server %s \n", username,;

return SUCCEED;
}

int HP_insert_database(char * insert_string, int string_length) {
  int rc;
memset ( param1, 0, BUFF_SIZE_OF_MSG);
strncpy ( param1, insert_string, string_length ); printf ( "\nSending a message by calling stored procedure..." ); printf ( "%d, %.*s",string_length, string_length, param1 );

/*
Call STORED PROCEDURES HERE.
*/
EXEC SQL EXECUTE

        BEGIN
                rpcfacts ( :param1 );
        END;

END-EXEC;
return SUCCEED;
}

void HP_close_database(void)
{
/*
Disconnect ORACLE database.
*/
printf ( "\nDisconnecting from ORACLE database.. " ); EXEC SQL COMMIT WORK RELEASE;
}

void sql_error ()
{
char msg[512];
int BufLen, MsgLen;

printf ( "Error occured.." );

EXEC SQL WHENEVER SQLERROR CONTINUE;
BufLen = sizeof ( msg );
sqlglm ( msg, &BufLen, &MsgLen );

EXEC SQL ROLLBACK WORK RELEASE; DBG_PRINT0(DBG_TRACE_ALWAYS, "err_handler() ->\n"); DBG_PRINT2(DBG_TRACE_ALWAYS, "%.*s\n", MsgLen, msg );

}

Sent via Deja.com http://www.deja.com/
Before you buy. Received on Tue Nov 30 1999 - 13:28:36 CST

Original text of this message

HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US