[PL/pgSQL] How should I use FOUND special variable. Documentation is little unclear for me

Started by Jeremiasz Miedzinskiover 19 years ago3 messagesgeneral
Jump to latest
#1Jeremiasz Miedzinski
jmiedzinski@gmail.com

Hello.

I'm porting some procedures from PL/SQL and I encountered following
problem:
In PL/SQL I'm using this statement related to cursor:

OPEN crs_cnt(start_millis, end_millis);
LOOP
FETCH crs_cnt into row_cnt;
EXIT WHEN crs_cnt%NOTFOUND;
insert into spm_audit_stats values(SEQ_SPM_ID_AUTO_INC.nextval,
start_millis, base_stat_period, row_cnt.adt_count, row_cnt.adt_avg,
row_cnt.adt_max, row_cnt.adt_min, row_cnt.adt_stdev,
row_cnt.adt_service_name, row_cnt.adt_root_user);
global_counter := global_counter + 1;
END LOOP;
CLOSE crs_cnt;

Now, I need to do the same action in PL/pgSQL. It's rather simple, but I
don't know how to use FOUND variable described in documentation:

FETCH retrieves the next row from the cursor into a target, which may be a
row variable, a record variable, or a comma-separated list of simple
variables, just like SELECT INTO. As with SELECT INTO, the special variable
FOUND may be checked to see whether a row was obtained or not.

When I'm trying to use it in Oracle way, my DB reports error. Also I tried
to use it like that:

IF NOT crs_cnt%FOUND THEN ...

But it also doesn't worked for me.

Thanks for any help.

Kind Regards.

--
-- audi vide sile --

#2brian
brian@zijn-digital.com
In reply to: Jeremiasz Miedzinski (#1)
Re: [PL/pgSQL] How should I use FOUND special variable.

Jeremiasz Miedzinski wrote:

Hello.

I'm porting some procedures from PL/SQL and I encountered following
problem:
In PL/SQL I'm using this statement related to cursor:

OPEN crs_cnt(start_millis, end_millis);
LOOP
FETCH crs_cnt into row_cnt;
EXIT WHEN crs_cnt%NOTFOUND;
insert into spm_audit_stats values(SEQ_SPM_ID_AUTO_INC.nextval,
start_millis, base_stat_period, row_cnt.adt_count, row_cnt.adt_avg,
row_cnt.adt_max, row_cnt.adt_min, row_cnt.adt_stdev,
row_cnt.adt_service_name, row_cnt.adt_root_user);
global_counter := global_counter + 1;
END LOOP;
CLOSE crs_cnt;

Now, I need to do the same action in PL/pgSQL. It's rather simple, but I
don't know how to use FOUND variable described in documentation:

FETCH retrieves the next row from the cursor into a target, which may be a
row variable, a record variable, or a comma-separated list of simple
variables, just like SELECT INTO. As with SELECT INTO, the special variable
FOUND may be checked to see whether a row was obtained or not.

When I'm trying to use it in Oracle way, my DB reports error. Also I tried
to use it like that:

IF NOT crs_cnt%FOUND THEN ...

But it also doesn't worked for me.

Thanks for any help.

Kind Regards.

EXIT WHEN NOT FOUND

brian

#3Brendan Jurd
direvus@gmail.com
In reply to: Jeremiasz Miedzinski (#1)
Re: [PL/pgSQL] How should I use FOUND special variable. Documentation is little unclear for me

On 11/9/06, Jeremiasz Miedzinski <jmiedzinski@gmail.com> wrote:

Now, I need to do the same action in PL/pgSQL. It's rather simple, but I
don't know how to use FOUND variable described in documentation:

FETCH retrieves the next row from the cursor into a target, which may be a
row variable, a record variable, or a comma-separated list of simple
variables, just like SELECT INTO. As with SELECT INTO, the special variable
FOUND may be checked to see whether a row was obtained or not.

When I'm trying to use it in Oracle way, my DB reports error. Also I tried
to use it like that:

IF NOT crs_cnt%FOUND THEN ...

In PL/pgsql, FOUND is just a variable which is set to true or false on
the outcome of each SELECT or FETCH.

To use it in your example, you could do:

OPEN crs_cnt(start_millis, end_millis);
LOOP
FETCH crs_cnt into row_cnt;
EXIT WHEN NOT FOUND;
-- do stuff with the row
END LOOP;
CLOSE crs_cnt;

Regards,
BJ