尊敬的大牛,我在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 2016
Copyright (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.cfg
Error 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陳述句建表和插入有什么邏輯問題?
求哥幫忙看看。
感謝。。。
uj5u.com熱心網友回復:
我沒用過proc ,結果是我猜想的要看proc的運行機制,是預先編譯好,還是在運行時再編譯
1、執行動態的建表陳述句,那么sql應該是變數吧。至于變數在proc里面如何體現,那就不知道了
2、如果表不存在,那對應執行的select from table時,table找不到,也可能會報錯,此時也應該用變數代替
uj5u.com熱心網友回復:
你好,請問你的問題解決了么轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/110518.html
標籤:基礎和管理
上一篇:資料庫同步
