小弟在Pro*c中写了一个PL/SQL块,里面有一个光标操作,且 test1表已经定义。如下:int main( int ac, char **av )
{
connectDB();
EXEC SQL EXECUTE
DECLARE
CURSOR my_cur IS (SELECT * FROM test1 );
BEGIN
FOR onerec IN my_cur LOOP
DBMS_OUTPUT.PUT_LINE( onerec.id || ' ' || onerec.name );
END LOOP;
END; END-EXEC; EXEC SQL COMMIT WORK RELEASE ; return 0;
}可是当编辑完预编译的时候却总是出现错误,错误信息如下:Pro*C/C++: Release 10.1.0.3.0 - Production on Mon Jul 21 00:14:34 2008Copyright (c) 1982, 2004, Oracle. All rights reserved.System default option values taken from: /home/oracle/precomp/admin/pcscfg.cfgError at line 29, column 49 in file t6.pc
CURSOR my_cur IS (SELECT * FROM test1 );
................................................1
PLS-S-00201, identifier 'TEST1' must be declared
Error at line 29, column 28 in file t6.pc
CURSOR my_cur IS (SELECT * FROM test1 );
...........................1
PLS-S-00000, SQL Statement ignored
Error at line 32, column 47 in file t6.pc
DBMS_OUTPUT.PUT_LINE( onerec.id || ' ' || onerec.name
);
..............................................1
PLS-S-00364, loop index variable 'ONEREC' use is invalid
Error at line 32, column 19 in file t6.pc
DBMS_OUTPUT.PUT_LINE( onerec.id || ' ' || onerec.name
);
..................1
PLS-S-00000, Statement ignored
Semantic error at line 28, column 11, file t6.pc:
DECLARE
..........1
PCC-S-02346, PL/SQL found semantic errors我就不明白了,test1表我明明定义了啊,为什么还提示我“identifier 'TEST1' must be declared”?还有PLS-S-00364, loop index variable 'ONEREC' use is invalid这个错误是怎么回事呢?谢谢
{
connectDB();
EXEC SQL EXECUTE
DECLARE
CURSOR my_cur IS (SELECT * FROM test1 );
BEGIN
FOR onerec IN my_cur LOOP
DBMS_OUTPUT.PUT_LINE( onerec.id || ' ' || onerec.name );
END LOOP;
END; END-EXEC; EXEC SQL COMMIT WORK RELEASE ; return 0;
}可是当编辑完预编译的时候却总是出现错误,错误信息如下:Pro*C/C++: Release 10.1.0.3.0 - Production on Mon Jul 21 00:14:34 2008Copyright (c) 1982, 2004, Oracle. All rights reserved.System default option values taken from: /home/oracle/precomp/admin/pcscfg.cfgError at line 29, column 49 in file t6.pc
CURSOR my_cur IS (SELECT * FROM test1 );
................................................1
PLS-S-00201, identifier 'TEST1' must be declared
Error at line 29, column 28 in file t6.pc
CURSOR my_cur IS (SELECT * FROM test1 );
...........................1
PLS-S-00000, SQL Statement ignored
Error at line 32, column 47 in file t6.pc
DBMS_OUTPUT.PUT_LINE( onerec.id || ' ' || onerec.name
);
..............................................1
PLS-S-00364, loop index variable 'ONEREC' use is invalid
Error at line 32, column 19 in file t6.pc
DBMS_OUTPUT.PUT_LINE( onerec.id || ' ' || onerec.name
);
..................1
PLS-S-00000, Statement ignored
Semantic error at line 28, column 11, file t6.pc:
DECLARE
..........1
PCC-S-02346, PL/SQL found semantic errors我就不明白了,test1表我明明定义了啊,为什么还提示我“identifier 'TEST1' must be declared”?还有PLS-S-00364, loop index variable 'ONEREC' use is invalid这个错误是怎么回事呢?谢谢
解决方案 »
- oracle number精度问题
- ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
- 求Grid Control下载地址
- oracle有没有像db2中Federated Database技术
- 急,关于授权的问题!
- win2000 的 oracle 中 oracleorahome81managementserver服务启动后以停止了,怎么解决啊?在线等,急!急!急!
- oracle9i在linux9上安装的权限问题!在线等候!
- SQL大比拚
- ORACLE 里有计算时间差(精确到秒)的函数吗?
- ORA-12154 TNS:Could not resolve service name错误的原因是什么,解决方法!
- 请教数据库高手: 为何我能看到其他用户建的包头却看不到包体
- 请教个oralce问题,知道的,不知道的进来看看
{
connectDB();
EXEC SQL EXECUTE
DECLARE
CURSOR my_cur IS (SELECT * FROM test1 );
BEGIN
-- 显式游标:
open my_cur;
fetch my_cur;
while my_cur%found loop
...
end loop;
close my_cur; -- 或者用隐式游标实现
-- for x in (SELECT * FROM test1 ) loop
-- ...
-- end loop; END; END-EXEC; EXEC SQL COMMIT WORK RELEASE ; return 0;
}
CURSOR my_cur IS (SELECT * FROM TEST1);
BEGIN
FOR v_row IN my_cur
LOOP
DBMS_OUTPUT.PUT_LINE(v_row.name);
END LOOP;
END;我在PL/SQL developer上运行上面的程序没问题啊
你说的对,是可以这么执行的。呵呵,是我没见过,不好意思啊。lz 确定connectdb()里的用户与建test1表的是同一个用户吗?
EXEC SQL BEGIN DECLARE SECTION;
char sql[1000];
struct *stru_temp
EXEC SQL END DECLARE SECTION;sql="你的语句";
EXEC SQL PREPARE psql from :sql;
if(sqlca.sqlcode!=0)
printf(" prepare faluse,sqlcode=%d\n",sqlca.sqlcode);
EXEC SQL DECLARE csql1 CURSOR FOR psql;
EXEC SQL OPEN csql1;
while (sqlca.sqlcode==0 || sqlca.sqlcode==1403)
{
EXEC SQL FETCH csql1 INTO :stru_temp;
}
EXEC SQL CLOSE csql1;