How to read a table output of a procedure in C [message #94476] |
Tue, 14 December 2004 17:14 |
sridhar
Messages: 119 Registered: December 2001
|
Senior Member |
|
|
Hi,
i have written some code to access an oracle procedure in PL/SQL.The procedure takes in 5 inputput parameters and returns one table parameter whose structure is defined in the package of the procedure.After compling the Pro C code an equivalent C code is generated.Now in C how do read this table returned by the PL/SQL.
Following is the snipet of the code for ur reference.
PL/SQL Code:
edt_pr_ftm2sap_pub.call_tax (p_caller_id => 'Scenario_b'
,p_call_date => TRUNC(SYSDATE)
,p_event_id => 21038
,x_edt_out_params_tr => l_edt_out_params_tr--------[>]Table
,x_msg_table_t => l_msg_t------------[>]table
,x_return_status => l_status);
Its corresponding C code that is generated.
{
struct sqlexd sqlstm;
sqlstm.sqlvsn = 10;
sqlstm.arrsiz = 4;
sqlstm.sqladtp = &sqladt;
printf("First %s",sqlstm.sqladtp);
getch();
sqlstm.sqltdsp = &sqltds;
printf("First %s",sqlstm.sqltdsp);
getch();
sqlbuft((void **)0,
"declare l_msg_t edt_pr_ftm2sap_pub . edt_plsql_messages_tty ; l_edt_out_
params_tr edt_pr_ftm2sap_pub . edt_out_params_trty ; l_status VARCHAR2 ( 1 )
; l_start DATE ; l_end DATE ; l_param_num NUMBER ; l_param_type INTEGER ; l
_type_id NUMBER ; l_type_code VARCHAR2 ( 30 ) ; l_type_name VARCHAR2 ( 90 )
; l_type_descn VARCHAR2 ( 4000 ) ; l_type_start_date DATE ; l_type_end_date
DATE ; l_type_updt_seq_num NUMBER ( 10 ) ; l_type_log_del_ind NUMBER ( 1 ) ;
l_post_id NUMBER ; l_post_code VARCHAR2 ( 30 ) ; l_post_name VARCHAR2 ( 90
) ; l_post_descn VARCHAR2 ( 4000 ) ; l_post_start_date DATE ; l_post_end_dat
e DATE ; l_post_updt_seq_num NUMBER ( 10 ) ; l_post_log_del_ind NUMBER ( 1 )
; l_ref_param_id NUMBER ; l_val_v VARCHAR2 ( 4000 ) ; l_val_n NUMBER ; l_va
l_d DATE ; l_val_s_id NUMBER ; l_val_s_code VARCHAR2 ( 30 ) ; l_val_s_name V
ARCHAR2 ( 90 ) ; l_val_s_descn VARCHAR2 ( 4000 ) ; l_val_s_start_date DATE ;
l_val_s_end_date DATE ; l_val_s_updt_seq_num NUMBER ( 10 ) ; l_val_s_log_de
l_ind NUMBER ( 1 ) ; l_datatype NUMBER ;");
sqlstm.stmt = " l_measure_type_id NUMBER ; l_rounded VARCHAR2 ( 1 ) ; l_out
_ix INTEGER ; l_msg_ix INTEGER ; l_msg VARCHAR2 ( 4000 ) ; BEGIN dbms_output .
enable ( 1000000 ) ; edt_pr_ftm2sap_pub . call_tax ( p_caller_id => 'Scenario
_b' , p_call_date => TRUNC ( SYSDATE ) , p_event_id => 21038 , x_edt_out_param
s_tr => l_edt_out_params_tr , x_msg_table_t => l_msg_t , x_return_status => l_
status ) ; END ;";
sqlstm.iters = (unsigned int )1;
sqlstm.offset = (unsigned int )334;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
printf("First %s",sqlstm.sqlest);
getch();
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
printf("Error %d",sqlca.sqlcode);
getch();
if (sqlca.sqlcode < 0) sql_error();
}
******************
How do I read the two tables in C.How do I define host variables of these two tables?
Thx.....
|
|
|