Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
Home -> Community -> Usenet -> c.d.o.server -> Passing parameter from C to stored procedure.
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;
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