printf("%s|%6s%19s%21s%11sn", v[0], v[1], v[2], v[3], v[4]);
}
argv[0] = "5";
if (SQLO_SUCCESS != sqlo_reopen(sth, argc, argv))
{
printf("sqlo_reopen failed: %sn", sqlo_geterror(dbh));
return 0;
}
printf("Fetch againn");
while (0 == sqlo_fetch(sth,1))
{
v = sqlo_values(sth, NULL, 0);
printf("%s|%6s%19s%21s%11sn", v[0], v[1], v[2], v[3], v[4]);
}
#ifdef CLOSE_CURSOR
if (0 > sqlo_close(sth))
{
printf("sqlo_open failed: %sn", sqlo_geterror(dbh));
return 0;
}
#endif
return 1;
}
/*-------------------------------------------------------------------------
* test_plsql
*-----------------------------------------------------------------------*/
int test_plsql( int dbh )
{
int ip2, op1;
double ip1;
char op2[40];
char * create_pack =
"CREATE OR REPLACE PACKAGE SQLORA_TEST ISn"
" PROCEDURE P1(ip1 IN NUMBER, ip2 IN NUMBER, op1 OUT NUMBER, op2 OUT VARCHAR);n"
"END;n";
char * create_pack_body =
"CREATE OR REPLACE PACKAGE BODY SQLORA_TEST ISn"
" PROCEDURE P1(ip1 IN NUMBER, ip2 IN NUMBER, op1 OUT NUMBER, op2 OUT VARCHAR)n"
" IS n"
" BEGINn"
" op1 := TO_NUMBER(ip1) + ip2;n"
" op2 := TO_CHAR(op1);n"
" END;n"
"END;n";
char * stmt =
"BEGINn"
" SQLORA_TEST.P1(:ip1, :ip2, :op1, :op2);n"
"END;n";
int sth;
printf("Testing PL/SQL proceduren");
if (SQLO_SUCCESS != sqlo_exec(dbh, create_pack))
{
printf("sqlo_exec failed: %sn%sn",sqlo_geterror(dbh), create_pack );
return 0;
}
printf("Package createdn");
if (SQLO_SUCCESS != sqlo_exec(dbh, create_pack_body))
{
printf("sqlo_exec failed: %sn%sn",sqlo_geterror(dbh), create_pack_body );
return 0;
}
printf("Package body createdn");
ip1 = 1.123456789012345;
ip2 = 20;
op1 = 0;
*op2 = 0;
if (0 <= (sth = sqlo_prepare(dbh, stmt)))
{
if (SQLO_SUCCESS !=
(sqlo_bind_by_name(sth, ":ip1", SQLOT_FLT, &ip1, sizeof(ip1),0,0) ||
sqlo_bind_by_name(sth, ":ip2", SQLOT_INT, &ip2, sizeof(ip2),0,0) ||
sqlo_bind_by_name(sth, ":op1", SQLOT_INT, &op1, sizeof(op1),0,0) ||
sqlo_bind_by_name(sth, ":op2", SQLOT_STR, op2, sizeof(op2),0,0)
))
{