|
Как в процедуре работать с записями а не отдельными полями?
|
|||
---|---|---|---|
#18+
Пример того чего пытаюсь сделать (псевдокод): Код: plaintext 1. 2. 3. 4. 5.
Т.е. просто определяю запись с типом записи из таблицы, и потом работаю целиком с этой записью. Как это сделать в Информиксе? Пытался использовать row type но это вроде немного не то. Тут бы тип record ... Надо чтобы не перечислять определения переменных и кучу полей в выборках типа Код: plaintext 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2011, 11:44 |
|
Как в процедуре работать с записями а не отдельными полями?
|
|||
---|---|---|---|
#18+
Andron Код: plaintext 1. 2. 3.
Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2011, 12:57 |
|
Как в процедуре работать с записями а не отдельными полями?
|
|||
---|---|---|---|
#18+
АнатоЛой, Нет, не то. Я не зря там многоточие между select и insert поставил, там много чего может быть, проверки разные, и т.д. Поэтому простой insert тут не пойдет. Было бы неплохо иметь в SPL тип record как в некоторых других базах со свойствами которые я описал в первом посте а также с доступом к отдельным полям (это же record). ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2011, 14:23 |
|
Как в процедуре работать с записями а не отдельными полями?
|
|||
---|---|---|---|
#18+
Andron, в 7.31 для этой цели годились TEMP TABLE WITH NO LOG... Даже если в них одна строчка :). Правда, возня с "дропаньем"... Вариант? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2011, 14:51 |
|
Как в процедуре работать с записями а не отдельными полями?
|
|||
---|---|---|---|
#18+
АнатоЛой, У меня 11.50, вариант с временной таблицей я тоже рассматривал, вполне кстати может и подойдет. Но придется как то ограничивать чтобы в такой таблице было не больше одной записи. Триггер before insert например навешивать на нее. Да и с производительностью такого решения тоже не все ясно. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2011, 14:58 |
|
Как в процедуре работать с записями а не отдельными полями?
|
|||
---|---|---|---|
#18+
Andron, а ещё ты же версию не наззвал :). В IDS c 10-ки появился тип данных ROW :). Для 11.70 смотри тут . Особенности использования могут понравиться, могут нет - на любителя :). ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2011, 14:59 |
|
Как в процедуре работать с записями а не отдельными полями?
|
|||
---|---|---|---|
#18+
AndronАнатоЛой, У меня 11.50, вариант с временной таблицей я тоже рассматривал, вполне кстати может и подойдет. Но придется как то ограничивать чтобы в такой таблице было не больше одной записи. Триггер before insert например навешивать на нее. Да и с производительностью такого решения тоже не все ясно. С триггером для временной таблицы - это ты жёстко... Проверок типа "SELECT count(*) FROM temp_table" или "SELECT dbinfo("sqlca.sqlerrdx")" после INSERT'а тебе не хватит? Кроме того, в некоторых случаях от доп.записей даже польза - с чувством, толком и расстановкой можешь выяснить чем же "лишние" данные отличаются от искомой строки при отладке... :). А с производительностью всегда вопрос, не только с временными таблицами, производительность проверять и так, и так надо :(. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2011, 15:05 |
|
Как в процедуре работать с записями а не отдельными полями?
|
|||
---|---|---|---|
#18+
АнатоЛойAndron, а ещё ты же версию не наззвал :). В IDS c 10-ки появился тип данных ROW :). ... Я про row в первом посте написал, не получаются с ним такие фокусы, мб я неправильно его готовил но работает только так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Т.е. получается примерно то же самое как и при использовании с переменными, а вот например так не работает select * into row1 from t1 where id = 1; -- -661 Number of variables does not match number of values returned. он как бы не видит что я ему не просто переменную подставляю а row, и вот это на мой взгляд является недоработкой данного типа. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2011, 15:26 |
|
Как в процедуре работать с записями а не отдельными полями?
|
|||
---|---|---|---|
#18+
Там в примере обновление статистики и запуск конечно для процедуры row_test а не для row_test2 т.е. так: Код: plaintext 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.09.2011, 15:29 |
|
Как в процедуре работать с записями а не отдельными полями?
|
|||
---|---|---|---|
#18+
Andron, --drop procedure row_test; create procedure row_test () define row1 row (id int, f1 char); let row1 = row(null, null); -- если значение не инициализировать то при execute будет ошибка !!! select row (id, f1) into row1 from t1 where id = 1; -- -661 Number of variables does not match number of values returned. end procedure; update statistics for procedure row_test; execute procedure row_test(); ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2015, 09:39 |
|
Как в процедуре работать с записями а не отдельными полями?
|
|||
---|---|---|---|
#18+
cprAndron, --drop procedure row_test; create procedure row_test () define row1 row (id int, f1 char); let row1 = row(null, null); -- если значение не инициализировать то при execute будет ошибка !!! select row (id, f1) into row1 from t1 where id = 1; -- -661 Number of variables does not match number of values returned. end procedure; update statistics for procedure row_test; execute procedure row_test(); В том смысле, что так работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2015, 09:40 |
|
|
start [/forum/topic.php?fid=44&gotonew=1&tid=1606896]: |
0ms |
get settings: |
24ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
69ms |
get topic data: |
12ms |
get first new msg: |
9ms |
get forum data: |
3ms |
get page messages: |
277ms |
get tp. blocked users: |
2ms |
others: | 360ms |
total: | 779ms |
0 / 0 |