PRO*C problem
From: Haris Kusumo <hkusumo_at_socs.uts.EDU.AU>
Date: 12 Aug 1993 19:12:30 +1000
Message-ID: <24d1hu$446_at_saturn.socs.uts.edu.au>
File: fred.pc
EXEC SQL BEGIN DECLARE SECTION;
EXEC SQL END DECLARE SECTION;
EXEC SQL INCLUDE SQLCA.H; #include "oracle_lib.h"
}
File: oracle_lib.pc
EXEC SQL BEGIN DECLARE SECTION;
EXEC SQL END DECLARE SECTION;
EXEC SQL INCLUDE SQLCA.H; #include "oracle_lib.h"
}
}
The program works fine until it reach this statement:
it seems that it doesn't know where the l2 is pointing to, when it tries to create table fred.
Date: 12 Aug 1993 19:12:30 +1000
Message-ID: <24d1hu$446_at_saturn.socs.uts.edu.au>
Hi, I have problem with PRO*C.
I just wondering if you guys can help me or give me some direction.
As I understand ORACLE 7 support dynamic database label.
This is my program listing.
File: fred.pc
EXEC SQL BEGIN DECLARE SECTION;
EXEC SQL END DECLARE SECTION;
EXEC SQL INCLUDE SQLCA.H; #include "oracle_lib.h"
main ()
{
if (! _db_connect ("l1", "scott", "tiger", "saturn", "sid1"))
{
printf ("error l1\n");
return;
}
if (! _db_connect ("l2", "scott", "tiger", "bison", "bison7"))
{
printf ("error l2\n");
return;
}
if (! _exec_statement ("l1", "CREATE TABLE FRED (NAME CHAR(2))"))
{
printf ("error l1 create table\n");
return;
}
if (! _exec_statement ("l2", "CREATE TABLE FRED (NAME CHAR(2))"))
{
printf ("error l2 create table\n");
return;
}
if (! _exec_statement ("l1", "INSERT INTO FRED VALUES ('hi')"))
{
printf ("error l1 insert\n");
return;
}
printf ("finish!\n");
}
File: oracle_lib.pc
EXEC SQL BEGIN DECLARE SECTION;
EXEC SQL END DECLARE SECTION;
EXEC SQL INCLUDE SQLCA.H; #include "oracle_lib.h"
int _db_connect (label, login, password, server, db)
char* label;
char* login;
char* password;
char* server;
char* db;
{
EXEC SQL BEGIN DECLARE SECTION;
VARCHAR _label [128];
VARCHAR _login [31];
VARCHAR _password [31];
VARCHAR _host [128];
EXEC SQL END DECLARE SECTION;
strcpy (_login.arr, login);
_login.len = strlen (_login.arr);
strcpy (_password.arr, password);
_password.len = strlen (_password.arr);
strcpy (_host.arr, "t:");
strcat (_host.arr, server);
strcat (_host.arr, ":");
strcat (_host.arr, db);
_host.len = strlen (_host.arr);
EXEC SQL WHENEVER SQLERROR GOTO errrpt;
if (label == (char *) NULL)
{
EXEC SQL CONNECT :_login IDENTIFIED BY :_password
USING :_host;
}
else
{
strcpy (_label.arr, label);
_label.len = strlen (_label.arr);
EXEC SQL CONNECT :_login IDENTIFIED BY :_password
AT :_label USING :_host;
}
return (1);
errrpt:
return (0);
}
int _exec_statement(char* label, char* statement) {
EXEC SQL BEGIN DECLARE SECTION;
VARCHAR _statement [301];
VARCHAR _label [128];
EXEC SQL END DECLARE SECTION;
strcpy (_statement.arr, statement);
_statement.len = strlen (_statement.arr);
EXEC SQL WHENEVER SQLERROR GOTO errrpt;
if (label != (char *) NULL)
{
strcpy (_label.arr, label);
_label.len = strlen (_label.arr);
EXEC SQL AT :_label DECLARE sql_stmt STATEMENT;
EXEC SQL PREPARE sql_stmt FROM :_statement;
EXEC SQL EXECUTE sql_stmt;
}
else
{
EXEC SQL DECLARE sql_stmt1 STATEMENT;
EXEC SQL PREPARE sql_stmt1 FROM :_statement;
EXEC SQL EXECUTE sql_stmt1;
}
return (1);
errrpt:
EXEC SQL ROLLBACK WORK;
return (0);
}
The program works fine until it reach this statement:
if (! _exec_statement ("l2", "CREATE TABLE FRED (NAME CHAR(2))"))
{
printf ("error l2 create table\n");
return;
}
it seems that it doesn't know where the l2 is pointing to, when it tries to create table fred.
I'll be appreciated if you can send me e-mail instead of putting the solution on net-news, because I don't read net-news every days.
my e-mail address: hkusumo_at_socs.uts.edu.au
Thanks in advance. Received on Thu Aug 12 1993 - 11:12:30 CEST
