如何编译这段Tuxedo Pro*C程序? 环境设置与编译选项

来源:百度文库 编辑:神马文学网 时间:2024/10/04 16:26:03
我用c++ 写了一段Ppro*C 的程序,用Procc预编译成功,并能通过VC
的编译和运行,但当我把他改造成Tuxedo的服务时(在TUXEDO里访问Oracle)
编译通不过(buildserver失败)
谁能给出一些编译TUXEDO+PRO*C的设置 ,编译条件等,
谢谢
下面是我的代码:
---------------------------------------------
#include
#include
#include
#include
#include
#include
#include
#include
/* 包括SQL通讯区 */
#include
using namespace std;
#ifdef __cplusplus
extern "C" {
#endif
//EXEC SQL INCLUDE sqlca;
/*RELEASE_CURSOR=YES 使PROC 在执行后释放与嵌入SQL有关资源*/
EXEC ORACLE OPTION (RELEASE_CURSOR = YES);
/*
* 连接到Oracle数据库子程序。
*/
void logon(sql_context ctx)
{
EXEC SQL BEGIN DECLARE SECTION;
VARCHAR username[20],password[20],server[20];
EXEC SQL END DECLARE SECTION;
EXEC SQL CONTEXT USE :ctx;
/*设置连接数据库的用户名、密码和数据库服务名*/
memcpy(username.arr,"szdb",strlen((char *)"szdb"));
username.len=(unsigned short)strlen((char *)"szpostalcrm");
memcpy(password.arr,"123e45",strlen((char *)"123e45"));
password.len=strlen((char *)"123e45");
memcpy(server.arr,"szsvr",strlen((char *)"szsvr"));
server.len=(unsigned short)strlen((char *)"szsvr");
userlog("\nUserName=%s;Password=%s;server=%s\n", username.arr,password.arr,server.arr);
EXEC SQL CONNECT :username IDENTIFIED BY :password USING :server;
userlog("\n以用户%s成功地连接到了服务器%s上!\n", username.arr,server.arr);
}
/*
* 断开数据库连接子程序。
*/
void logoff(sql_context ctx)
{
EXEC SQL CONTEXT USE :ctx;
EXEC SQL COMMIT WORK RELEASE;
userlog("Disconnect!\n");
}
void sql_error(char *msg)
{
EXEC SQL WHENEVER SQLERROR CONTINUE;
userlog("\n%s", msg);
userlog("\n% .70s \n", sqlca.sqlerrm.sqlerrmc);
EXEC SQL ROLLBACK WORK RELEASE;
exit(EXIT_FAILURE);
}
ORASQL(TPSVCINFO *rqst)
{
char *sendbuf=NULL;
/*声明宿主变量*/
EXEC SQL BEGIN DECLARE SECTION;
VARCHAR usr[20],pass[20],serv[20];
char  departmentID[9];
char  updepartmentID[9];
char  departmentName[60];
int  pkid;
sql_context ctx0;
EXEC SQL END DECLARE SECTION;
/*  与ORACLE建立连接 */
EXEC SQL CONTEXT ALLOCATE :ctx0;
EXEC SQL CONTEXT USE :ctx0;
logon(ctx0);
userlog("Connected to oracle  ok.!\n");
EXEC SQL WHENEVER SQLERROR DO sql_error("Oracle error:");
/* Declare a cursor for the FETCH. */
EXEC SQL DECLARE c1 CURSOR FOR
SELECT FDEPARTMENTID,FUPDEPARTMENTID,FDEPARTMENTNAME FROM departments;
EXEC SQL OPEN c1;
/* Array fetch loop - ends when NOT FOUND becomes true. */
EXEC SQL WHENEVER NOT FOUND DO break;
ostringstream ostrm ;
ostrm<<""<for (;;)
{
EXEC SQL FETCH c1 INTO  :departmentID,updepartmentID,departmentName;
/* Print however many rows were returned. */
ostrm<<"ostrm<<"FUpDepartmentID=\""<ostrm<<"FDepartmentName=\""<"<}
ostrm<<"
"<EXEC SQL CLOSE c1;
userlog("data query from oracle:\n%s\n",ostrm.str().c_str());
int sendlen =  ostrm.str().size();
sendbuf = (char *)tpalloc( "STRING",NULL,sendlen+1);
if(sendbuf==(char *)NULL)
{
logoff(ctx0) ;
userlog("tpalloc() sendbuf failure\n");
tpreturn(TPFAIL, 0, (char *)"Error occurs when alloc mem", 0L, 0);
}
memcpy(sendbuf,ostrm.str().c_str(),sendlen);
/*提交事务并断开与数据库的连接*/
logoff(ctx0) ;
tpreturn( TPSUCCESS, 0, (char *)sendbuf, 0, 0 );
}
#ifdef __cplusplus
}
#endif
------------------------end of code -----------------------