Thread: [PL/pgSQL] How should I use FOUND special variable. Documentation is little unclear for me
[PL/pgSQL] How should I use FOUND special variable. Documentation is little unclear for me
From
"Jeremiasz Miedzinski"
Date:
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 --
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 --
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
Re: [PL/pgSQL] How should I use FOUND special variable. Documentation is little unclear for me
From
"Brendan Jurd"
Date:
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