Обсуждение: [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

От
"Jeremiasz Miedzinski"
Дата:
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 --

Re: [PL/pgSQL] How should I use FOUND special variable.

От
brian
Дата:

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

От
"Brendan Jurd"
Дата:
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