转换为使用Oracle Pro * C的现有程序在预编译时会引起问题。它从文件系统读取一个文件,对其进行解析,然后写入几个数据库表。
有一个具有以下定义的方法:
void parse_line(inline)
char *inline;
{
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
当我尝试做到这一点时,我看到:
Syntax error at line 162, column 13, file myfile.cp:
Error at line 162, column 13 in file myfile.cp
char *inline;
............1
PCC-S-02201, Encountered the symbol ";" when expecting one of the following:
( * const, volatile, an identifier,
Run Code Online (Sandbox Code Playgroud)
就我所知,此函数声明在语法上是正确的,因此我必须假定由于其他问题而出现此预编译器错误。
除了将整个程序粘贴在这里之外,有人对我可以开始寻找的一些好地方有任何建议吗?
我的pcscfg.cfg看起来像这样:
sys_include=($ORACLE_HOME/precomp/public,/usr/include,/usr/lib/gcc-lib/x86_64-redhat-linux/3.2.3/include,/usr/lib/gcc/x86_64-redhat-linux/4.1.1/include,/usr/lib64/gcc/x86_64-suse-linux/4.1.2/include,/usr/lib64/gcc/x86_64-suse-linux/4.3/include)
ltype=short
define=__x86_64__
Run Code Online (Sandbox Code Playgroud) 一个后EXEC SQL CONNECT user/pass;命令,system("")返回一个-1,并将errno = 10。
我们已将该程序从HP-UX上的Oracle 10g迁移到Red Hat Linux上的Oracle 11g。在HP-UX / Oracle 10g上没有发生这种情况。
#include <errno.h>
#include <dirent.h>
#include <sys/types.h>
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <signal.h>
#include <sys/stat.h>
typedef char vc2[10];
typedef char vc4[20];
EXEC SQL INCLUDE sqlca;
char *oracleid = "user/pass";
char msg[400];
char env[20][200];
#define DEBUG 1
int status = 1;
int main( argc, argv )
int argc;
char **argv;
{
int load_stat;
EXEC SQL BEGIN DECLARE SECTION;
EXEC SQL …Run Code Online (Sandbox Code Playgroud) 我对pro c很新,我没有任何开发pro c程序的实践经验.在调试程序时我遇到了一个函数调用
sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
Run Code Online (Sandbox Code Playgroud)
我在谷歌搜索sqlcxt()函数的帮助,但我没有找到任何资源.一些博客已经提到在预编译程序期间出现的问题,但它们是我没用的.
我正在使用Pro*C在我的表Registred_Customer中插入值时出现错误"Execute-984 ORA-00984:此处不允许列"
Registred_Customer定义为
CREATE TABLE Registred_Customer (
Cust_id NUMBER(6) PRIMARY KEY,
Name VARCHAR2(20) NOT NULL,
Age NUMBER,
Sex CHAR,
Addr VARCHAR2(50),
Contact NUMBER(10)
);
Run Code Online (Sandbox Code Playgroud)
使用pro*c方法插入值
addCustomer(i, name,age, gender, address,contectNo);
Run Code Online (Sandbox Code Playgroud)
在Pro*C方法中我使用以下代码插入
EXEC SQL INSERT INTO REGISTRED_CUSTOMER VALUES
(cust_id, cust_name, age, sex, addr, contact);
Run Code Online (Sandbox Code Playgroud)
这里的cust_name和addr是char*; 和性是作为int的char rest;
它在使用变量时报告错误,但使用直接值等工作正常 EXEC SQL INSERT INTO REGISTRED_CUSTOMER VALUES (10, 'Pankaj', 23, 'M', 'asdfs', 45875);
我尝试改变几行,但徒劳无功.
提前致谢.
我有一些遗留的Pro*C代码使用下面的结构.
这种模式可以在在线论坛上找到,但在Oracle文档中没有.
特别是,Google无法在Oracle网站上找到任何关于"sqhsts"的文档.
这种模式是否记录在某处?
它被认为是一种很好的编程习惯吗?
/* cud (compilation unit data) array */
static const short sqlcud0[] =
{10,4130,832,0,0,
5,0,0,1,0,0,27,23,0,0,4,4,0,1,0,1,97,0,0,1,97,0,0,1,97,0,0,1,10,0,0,
36,0,0,2,30,0,4,25,0,0,1,0,0,1,0,2,97,0,0,
};
/* EXEC SQL CONNECT :user IDENTIFIED BY :pwd USING :url; */
{
struct sqlexd sqlstm;
sqlstm.sqlvsn = 10;
sqlstm.arrsiz = 4;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.iters = (unsigned int )10;
sqlstm.offset = (unsigned int )5;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlstm.sqhstv[0] = ( …Run Code Online (Sandbox Code Playgroud) 我在 C 项目中有一个 pro*C 文件,我正在尝试编译它,但在编译后我没有得到 C 代码。
以下是环境变量:
ORACLE_HOME = /opt/vgi/oracle/12.1.0.2/client
Run Code Online (Sandbox Code Playgroud)
procTest.pc 文件:
#include <stdio.h>
#include <string.h>
#include <sqlda.h>
#include <sqlcpr.h>
EXEC SQL BEGIN DECLARE SECTION;
VARCHAR uid[30];
VARCHAR pwd[30];
EXEC SQL END DECLARE SECTION;
EXEC SQL INCLUDE SQLCA.H;
void main()
{
strcpy(uid.arr,"SCOTT");
uid.len =strlen(uid.arr);
strcpy(pwd.arr,"TIGER");
pwd.len = strlen(pwd.arr);
EXEC SQL WHENEVER SQLERROR GOTO errexit;
EXEC SQL CONNECT :uid IDENTIFIED BY :pwd;
printf("Connected to Oracle8i using Scott/Tiger\n");
EXEC SQL COMMIT WORK RELEASE;
return;
errexit:
printf("Connection failed");
return;
}
/* end …Run Code Online (Sandbox Code Playgroud)