|
|
|
suspend в ХП действия
|
|||
|---|---|---|---|
|
#18+
в таблице есть два поля 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 Первая из них копирует только первую запись а вторая все. Немогу понять почему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2003, 11:07 |
|
||
|
suspend в ХП действия
|
|||
|---|---|---|---|
|
#18+
На на кой в 1-й и 2-й процедуре SUSPEND? Выкинь и вызывай через EXECUTE PROCEDURE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2003, 12:22 |
|
||
|
suspend в ХП действия
|
|||
|---|---|---|---|
|
#18+
suspend нужен для того, чтобы пройти по всей выборке в select. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2003, 15:31 |
|
||
|
suspend в ХП действия
|
|||
|---|---|---|---|
|
#18+
для прохода по всем данным вобщето используется FOR SELECT..., а SUSPEND используется для возврата набора данных SELECT... как выходного параметра, тоесть при получении этой иструкции процедура приостанавливается, пока Датасет не получит текущую строку набора данных. Помоему так. Может я и не прав, тогда прошу поправить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2003, 15:52 |
|
||
|
|

start [/forum/topic.php?fid=40&gotonew=1&tid=1580506]: |
0ms |
get settings: |
7ms |
get forum list: |
16ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
153ms |
get topic data: |
11ms |
get first new msg: |
5ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 199ms |
| total: | 434ms |

| 0 / 0 |
