Sql 使用游标遍历表行
我正在尝试使用光标循环遍历各行,并使用Sql 使用游标遍历表行,sql,oracle,plsql,Sql,Oracle,Plsql,我正在尝试使用光标循环遍历各行,并使用line\u id和line\u message列中的消息为每行打印Hello World消息,但我得到一个错误: Errors: PROCEDURE CURSOR_PROC Line/Col: 4/10 PLS-00103: Encountered the symbol "CUR" when expecting one of the following: := . ( @ % ; ORA-06550: line 1, colu
line\u id
和line\u message
列中的消息为每行打印Hello World消息,但我得到一个错误:
Errors: PROCEDURE CURSOR_PROC
Line/Col: 4/10 PLS-00103: Encountered the symbol "CUR" when expecting one of the following:
:= . ( @ % ;
ORA-06550: line 1, column 7:
PLS-00905: object SQL_JRIJMVCLEKHINBWFZGYOVYVIR.CURSOR_PROC is invalid
下面是我的代码示例:
CREATE OR REPLACE PROCEDURE CURSOR_PROC
IS
BEGIN
cursor cur is select line_id, line_message from TABLE_T;
open cur;
for rec in cur LOOP
dbms_output.put_line('Hello world! ' || line_id || ', ' || line_message);
END LOOP;
END CURSOR_PROC;
/
EXEC CURSOR_PROC;
如何修复它?将光标定义放在DECLARE块中,并作为输出的一部分完全限定记录:
CREATE OR REPLACE PROCEDURE CURSOR_PROC
IS
DECLARE
cursor cur is select line_id, line_message from TABLE_T;
BEGIN
for rec in cur LOOP
dbms_output.put_line('Hello world! ' || rec.line_id || ', ' || rec.line_message);
END LOOP;
END CURSOR_PROC;
/
EXEC CURSOR_PROC;
请看这里:
此外,在此上下文中不严格要求使用
OPEN CURSOR
,但如果这样做,则在完成时始终包含一个显式CLOSE CURSOR
。CURSOR cur是select line\u id,line\u message from TABLE\t是一个声明,所以在开始之前我已经移动了这一行CREATE OR REPLACE PROCEDURE CURSOR_PROC
IS
cursor cur is select line_id, line_message from TABLE_T;
BEGIN
for rec in cur LOOP
dbms_output.put_line('Hello world! ' || rec.line_id || ', ' || rec.line_message);
END LOOP;
END CURSOR_PROC;
或者您可以完全取消声明游标
CREATE OR REPLACE PROCEDURE CURSOR_PROC
IS
BEGIN
for rec in (select line_id, line_message from TABLE_T)
LOOP
dbms_output.put_line('Hello world! ' || rec.line_id || ', ' || rec.line_message);
END LOOP;
END CURSOR_PROC;
/
已经修好了。请试试我的答案。