powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / suspend в ХП действия
5 сообщений из 5, страница 1 из 1
suspend в ХП действия
    #32162768
gray_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в таблице есть два поля afs_id - номер и data - дата по которым строится первичный ключ мне надо все значения определённых полей из одной даты скопировать в другую. Проблема состоит в том, что если не объявлять в процедуре возвращаемых значений, то копируются поля только первой записи. Вот текст хранимой процедуры:
Без возвращаемых значений:
CREATE PROCEDURE GET_MAXOST (
DATA_FROM TIMESTAMP,
DATA_TO TIMESTAMP)
AS
DECLARE VARIABLE "afs_id" INTEGER;
DECLARE VARIABLE "data" TIMESTAMP;
DECLARE VARIABLE "maxostd" DOUBLE PRECISION;
DECLARE VARIABLE "maxost80" DOUBLE PRECISION;
DECLARE VARIABLE "maxost92" DOUBLE PRECISION;
DECLARE VARIABLE "maxost95" DOUBLE PRECISION;
DECLARE VARIABLE "maxost98" DOUBLE PRECISION;
DECLARE VARIABLE "reccount" INTEGER;
begin
/* Procedure Text */
for select s1.afs_id, s1.data, s1.maxostd, s1.maxost80, s1.maxost92, s1.maxost95, s1.maxost98
from svodtab s1 where s1.data = :data_from into
:"afs_id", :"data", :"maxostd", :"maxost80", :"maxost92", :"maxost95", :"maxost98"
do begin
update svodtab set svodtab.maxostd=:"maxostd", svodtab.maxost80=:"maxost80", svodtab.maxost92=:"maxost92",
svodtab.maxost95=:"maxost95", svodtab.maxost98=:"maxost98"
where svodtab.data = (:data_to) and svodtab.afs_id = :"afs_id";
suspend;
end
end
с возвращаемыми знаениями:
CREATE PROCEDURE GET_MAXOST (
DATA_FROM TIMESTAMP,
DATA_TO TIMESTAMP)
RETURNS (
"afs_id1" INTEGER,
"data1" TIMESTAMP,
"maxostd1" DOUBLE PRECISION,
"maxost801" DOUBLE PRECISION,
"maxost921" DOUBLE PRECISION,
"maxost951" DOUBLE PRECISION,
"maxost981" DOUBLE PRECISION,
"reccount1" INTEGER)
AS
DECLARE VARIABLE "afs_id" INTEGER;
DECLARE VARIABLE "data" TIMESTAMP;
DECLARE VARIABLE "maxostd" DOUBLE PRECISION;
DECLARE VARIABLE "maxost80" DOUBLE PRECISION;
DECLARE VARIABLE "maxost92" DOUBLE PRECISION;
DECLARE VARIABLE "maxost95" DOUBLE PRECISION;
DECLARE VARIABLE "maxost98" DOUBLE PRECISION;
DECLARE VARIABLE "reccount" INTEGER;
begin
/* Procedure Text */
for select s1.afs_id, s1.data, s1.maxostd, s1.maxost80, s1.maxost92,
s1.maxost95, s1.maxost98
from svodtab s1 where s1.data = :data_from into
:"afs_id", :"data", :"maxostd", :"maxost80", :"maxost92", :"maxost95", :"maxost98"
do begin
update svodtab set svodtab.maxostd=:"maxostd",
svodtab.maxost80=:"maxost80", svodtab.maxost92=:"maxost92",
svodtab.maxost95=:"maxost95", svodtab.maxost98=:"maxost98"
where svodtab.data = (:data_to) and svodtab.afs_id = :"afs_id";
suspend;
end
end
Первая из них копирует только первую запись а вторая все. Немогу понять почему?
...
Рейтинг: 0 / 0
suspend в ХП действия
    #32162861
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На на кой в 1-й и 2-й процедуре SUSPEND? Выкинь и вызывай через EXECUTE PROCEDURE.
...
Рейтинг: 0 / 0
suspend в ХП действия
    #32163145
gray_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
suspend нужен для того, чтобы пройти по всей выборке в select.
...
Рейтинг: 0 / 0
suspend в ХП действия
    #32163180
Voha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для прохода по всем данным вобщето используется FOR SELECT..., а SUSPEND используется для возврата набора данных SELECT... как выходного параметра, тоесть при получении этой иструкции процедура приостанавливается, пока Датасет не получит текущую строку набора данных. Помоему так. Может я и не прав, тогда прошу поправить.
...
Рейтинг: 0 / 0
suspend в ХП действия
    #32163192
Voha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да к стати почитай статейку http://ibase.ru/devinfo/updsame.htm][эту]
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / suspend в ХП действия
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]