在PL/SQL存储过程中声明游标
printf(“本地时间问候语”) 在使用SQL Developer运行存储过程时遇到一些问题。下面是一个模式与前几行完全相同的示例,出于安全原因更改了变量名在PL/SQL存储过程中声明游标,sql,stored-procedures,plsql,oracle-sqldeveloper,Sql,Stored Procedures,Plsql,Oracle Sqldeveloper,printf(“本地时间问候语”) 在使用SQL Developer运行存储过程时遇到一些问题。下面是一个模式与前几行完全相同的示例,出于安全原因更改了变量名 CREATE OR REPLACE PROCEDURE redacted ( an_in_variable IN VARCHAR ) AS these VARCHAR; variables VARCHAR; don_apostrophe_t INT; matter INT; BEGIN DECLARE c
CREATE OR REPLACE PROCEDURE redacted ( an_in_variable IN VARCHAR ) AS
these VARCHAR;
variables VARCHAR;
don_apostrophe_t INT;
matter INT;
BEGIN
DECLARE cursor_giving_me_trouble CURSOR FOR
SELECT something FROM db.table WHERE condition_1 = condition_2;
...
在编辑器中,选择字是红色波浪线,当我尝试运行代码时,输出返回
PLS-00103: Encountered symbol "FOR" when expecting one of the following := . ( @ % ; not null range default character
有什么想法吗?您需要使用
IS
而不是FOR
,但您的定义术语顺序也不正确:
DECLARE
CURSOR cursor_giving_me_trouble IS
SELECT something FROM db.table WHERE condition_1 = condition_2;
由于模糊代码中存在非法的对象名称,但不是语法上的错误;还有一个
也可能您正试图使用以下构造:
FOR cursor_giving_me_trouble IN (
SELECT something FROM db.table WHERE condition_1 = condition_2
) LOOP
...
而不是一个子块(一个新的声明,后跟begin/end),只引用该子块中的游标 要开始,请执行以下操作:
create or replace procedure redacted
( an_in_variable in varchar2 )
as
these varchar2(123);
variables varchar2(456);
don_apostrophe_t integer;
matter integer;
cursor cursor_giving_me_trouble is
select 'Welcome to PL/SQL' as whatever from dual where 1=1;
begin
for r in cursor_giving_me_trouble loop
dbms_output.put_line(r.whatever);
end loop;
end;
但是,您通常不需要单独的游标定义,因为有这种紧凑的语法:
create or replace procedure redacted
( an_in_variable in varchar2 )
as
these varchar2(123);
variables varchar2(456);
don_apostrophe_t integer;
matter integer;
begin
for r in (
select 'Welcome to PL/SQL' as whatever from dual where 1=1
)
loop
dbms_output.put_line(r.whatever);
end loop;
end;
是
,而不是的@AlexPoole返回相同的错误,不幸的是,您的节的顺序是相反的。应该申报。。。BEGIN.DECLARE需要它自己的BEGIN/END,它可能已经存在于…
;但是在显示的现有BEGIN之前不应该有一个DECLARE-主过程块的变量声明是OK的(除了数据类型…)。