лучше один раз спросить нормально, чем сто раз повторять одно и то же.
В чем проблема так и не понятно.
Что здесь не так?
38.7.3.1. FETCH
FETCH [ direction { FROM | IN } ] cursor INTO target;
FETCH retrieves the next row from the cursor into a target, which might be a row variable, a record variable, or a comma-separated list of simple variables, just like SELECT INTO. If there is no next row, the target is set to NULL(s). As with SELECT INTO, the special variable FOUND can be checked to see whether a row was obtained or not.
open cursor_1 for select id_x from table1 INNER JOIN table2 ON table1.x = table2.x
FETCH cursor_1 INTO var;
move cursor_1 ;
insert into table3(id) values (var);
? А теперь, Я хочу взять слудующую запись.
Нужен цикл. И условие выхода из него.
declare
var int;
begin
FOR var INSELECT id_x FROM table1 INNERJOIN table2 ON table1.x = table2.x
loop
INSERTINTO table3(id)VALUES(var);
end loop;
end;
со всякими там курсорами (FOUND)
declare
r refcursor;
var int;
begin
open r FORSELECT id_x FROM table1 INNERJOIN table2 ON table1.x = table2.x;
loop
fetch r INTO var;
IFNOT FOUND then exit; end IF;
INSERTINTO table3(id)VALUES(var);
end loop;
end;
со всякими там курсорами 2 (без FOUND)
declare
r refcursor;
var record;
begin
open r FORSELECT id_x FROM table1 INNERJOIN table2 ON table1.x = table2.x;
loop
fetch r INTO var;
IF var ISNULL then exit; end IF;
INSERTINTO table3(id)VALUES(var.id_x);
end loop;
end;
количество записей - раз уж вы настаиваете (FOUND)
declare
r refcursor;
r_count int DEFAULT0;
begin
open r FORSELECT id_x FROM table1 INNERJOIN table2 ON table1.x = table2.x;
loop
move r;
IF FOUND then
r_count:=r_count+1;
else
exit;
end IF;
end loop;
end;
этот вариант, судя по всему, только в последней версии появился
declare
r cursor FORSELECT id_x FROM table1 INNERJOIN table2 ON table1.x = table2.x;
var record;
begin
FOR var IN r LOOP
INSERTINTO table3(id)VALUES(var.id_x);
END LOOP;
end;
цикл по курсору?
Насколько я понял, Вам нужно не количество записей в курсоре, а цикл по нему:
FOR recordvar IN bound_cursor LOOP
statements
END LOOP;
Подробнее: http://postgresql.ru.net/manual/plpgsql-cursors.html#PLPGSQL-CURSOR-FOR-...
Это из мануала:
http://postgresql.ru.net/manual/plpgsql-cursors.html
Спасибо. То что
Спасибо.
То что надо.
Оказалось,что
Оказалось,что не очень подходит для версии 7.3.
Нужен именно цикл по курсору.
Есть советы?
Спасибо.
лучше один раз
лучше один раз спросить нормально, чем сто раз повторять одно и то же.
В чем проблема так и не понятно.
Что здесь не так?
38.7.3.1. FETCH
FETCH [ direction { FROM | IN } ] cursor INTO target;
FETCH retrieves the next row from the cursor into a target, which might be a row variable, a record variable, or a comma-separated list of simple variables, just like SELECT INTO. If there is no next row, the target is set to NULL(s). As with SELECT INTO, the special variable FOUND can be checked to see whether a row was obtained or not.
Подробно вопрос.
declare
cursor_1 refcursor;
var INTEGER;
open cursor_1 for select id_x from table1 INNER JOIN table2 ON table1.x = table2.x
FETCH cursor_1 INTO var;
move cursor_1 ;
insert into table3(id) values (var);
? А теперь, Я хочу взять слудующую запись.
Нужен цикл. И условие выхода из него.
и что здесь
и что здесь такого страшного?
без всяких там курсоров (рекомендуется)
со всякими там курсорами (FOUND)
со всякими там курсорами 2 (без FOUND)
количество записей - раз уж вы настаиваете (FOUND)
этот вариант, судя по всему, только в последней версии появился
Спасибо
Спасибо большое за подробный ответ.
Переводим процедуры из MSSQL, хотелось сохранить максимально сходство .