Home » Developer & Programmer » Precompilers, OCI & OCCI » How to read a table output of a procedure in C
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.....
Previous Topic: What is a make file and how to make one
Next Topic: Very slow insert into ORACLE
Goto Forum:
  


Current Time: Fri Mar 29 07:27:28 CDT 2024