尊敬的大牛,我在proc程序里执行sql语句建表,插入数据. 在服务器oracle中处理,为何预编译都过不了,proc ***.pc -> ***.c代码如下
#include <stdio.h>
exec sql include sqlca;
int main(){
exec sql begin declare section;
char userpasswd[30]="openlab/open123";
int id=100;
char name[30]="test100";
exec sql end declare section;
exec sql connect:userpasswd;
if(!sqlca.sqlcode){
printf("connect success!\n");
}else{
printf("%s\n",sqlca.sqlerrm.sqlerrmc);
}
exec sql create table testprocsql(id number primary key,
name varchar2(30));
if(!sqlca.sqlcode){
printf("create table success!\n");
}else{
printf("%s\n",sqlca.sqlerrm.sqlerrmc);
}
exec sql insert into testprocsql values(1,'test1'); /* line22*/
if(!sqlca.sqlcode){
exec sql commit;
}else{
printf("%s\n",sqlca.sqlerrm.sqlerrmc);
}
exec sql insert into testprocsql values(:id,:name);
exec sql commit;
exec sql select name into :name from testprocsql where id=1;
printf("name=%s\n",name);
exec sql commit work release;
}
输入 proc sql.pc 出现以下预处理错误:
Pro*C/C++: Release 11.2.0.1.0 - Production on Fri Nov 11 13:16:49 2016Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.System default option values taken from: /home/oracle/app/oracle/product/11.2.0/dbhome_1/precomp/admin/pcscfg.cfgError at line 22, column 6 in file sql.pc
exec sql insert into testprocsql values(1,'test1');
.....1
PLS-S-00201, identifier 'TESTPROCSQL' must be declared
Error at line 22, column 6 in file sql.pc
exec sql insert into testprocsql values(1,'test1');
.....1
PLS-S-00000, SQL Statement ignored
Semantic error at line 22, column 6, file sql.pc:
exec sql insert into testprocsql values(1,'test1');
.....1
PCC-S-02346, PL/SQL found semantic errors而当我自己手动在服务器oracle执行sql语句建表 create table testprocsql(id number primary key,name varchar2(30));
建表成功后,我的代码就能预编译同过,并且编译链接运行成功。这是为什么。为什么表不存在时,proc 预编译都过不了,
表存在时,预编译通过。 难道proc程序执行sql语句建表和插入有什么逻辑问题?
求哥帮忙看看。
感谢
#include <stdio.h>
exec sql include sqlca;
int main(){
exec sql begin declare section;
char userpasswd[30]="openlab/open123";
int id=100;
char name[30]="test100";
exec sql end declare section;
exec sql connect:userpasswd;
if(!sqlca.sqlcode){
printf("connect success!\n");
}else{
printf("%s\n",sqlca.sqlerrm.sqlerrmc);
}
exec sql create table testprocsql(id number primary key,
name varchar2(30));
if(!sqlca.sqlcode){
printf("create table success!\n");
}else{
printf("%s\n",sqlca.sqlerrm.sqlerrmc);
}
exec sql insert into testprocsql values(1,'test1'); /* line22*/
if(!sqlca.sqlcode){
exec sql commit;
}else{
printf("%s\n",sqlca.sqlerrm.sqlerrmc);
}
exec sql insert into testprocsql values(:id,:name);
exec sql commit;
exec sql select name into :name from testprocsql where id=1;
printf("name=%s\n",name);
exec sql commit work release;
}
输入 proc sql.pc 出现以下预处理错误:
Pro*C/C++: Release 11.2.0.1.0 - Production on Fri Nov 11 13:16:49 2016Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.System default option values taken from: /home/oracle/app/oracle/product/11.2.0/dbhome_1/precomp/admin/pcscfg.cfgError at line 22, column 6 in file sql.pc
exec sql insert into testprocsql values(1,'test1');
.....1
PLS-S-00201, identifier 'TESTPROCSQL' must be declared
Error at line 22, column 6 in file sql.pc
exec sql insert into testprocsql values(1,'test1');
.....1
PLS-S-00000, SQL Statement ignored
Semantic error at line 22, column 6, file sql.pc:
exec sql insert into testprocsql values(1,'test1');
.....1
PCC-S-02346, PL/SQL found semantic errors而当我自己手动在服务器oracle执行sql语句建表 create table testprocsql(id number primary key,name varchar2(30));
建表成功后,我的代码就能预编译同过,并且编译链接运行成功。这是为什么。为什么表不存在时,proc 预编译都过不了,
表存在时,预编译通过。 难道proc程序执行sql语句建表和插入有什么逻辑问题?
求哥帮忙看看。
感谢
解决方案 »
- Oracle查询问题,求帮一下忙!感谢!
- 怎么写sql语句,按字段1分组,求组内最大的字段2值时的字段3值
- 急啊!通过透明网关抽sybase数据到oracle速度慢
- oralce问题 Oracle Directory Manager连接
- 求教SQL优化方面的问题
- 80ORA-12571:TNS:包写入程序失败如何解决
- ORACLE 9I 可以连接上ORACLE 8I吗?兼容性如何?
- ▲求按金额分类计费的SQL▲
- 怎样屏蔽query{ }后的显示?
- 怎样在oracle 7.0下建表
- sqlldr 报错SQL*Loader-350: 语法错误位于第 4 行。
- 如何记录数据库执行的insert、update、delete?
要看proc的运行机制,是预先编译好,还是在运行时再编译1、执行动态的建表语句,那么sql应该是变量吧。至于变量在proc里面如何体现,那就不知道了
2、如果表不存在,那对应执行的select from table时,table找不到,也可能会报错,此时也应该用变量代替