|
Pl\pgSQL questions
|
|||
---|---|---|---|
#18+
Есть парочка =) 1. Как можно пройтись по RECORD в цикле Код: plaintext 1.
если query у нас динамический формируется на основе пришедих переменных в функцию и я не могу точно знать какие имена у полей record'а . т.е. Как не зная имен полей использовать значения в запросах ? ну даже хотя бы и зная имена, в переменной хранятся ну что то типа ''select * from table where a<>'' record. || tmp где tmp содержит имя поля в Record т.е. tmp= a_kod и нужно чтобы запрос выглядел примерно так select * from table where a<> 25 (а record.a_kod=25 ) 2. По поводу Null значений - кто как осуществляет проверку Null. а то выяснилось например что если в триггере или в функции будет запись вида query:= ''select 4to to tam from || table_name_var || ''where blablabla'' И при каких либо условиях наступает что table_name_var - null , то query автоматически становится Null такая же байда и с if конструкция IF var1 != var2 then else end if; при ситуации что одна переменная Null - Всегда вываливается в else (т.е. проверка - false). очень неудобно в триггерах проверять такую ситуацию - изменилось или нет значение поля IF OLD.a != NEW.a then else end if при OLD.a - null получаем всегда false, хотя зачение изменилось и new.a уже не null. приходится писать IF OLD.a != NEW.a OR (OLD.a is null and new.a is not null) then (или обратную проверку OLD.a is not null and new.a is null . А для обоих случаев вообще некрасиво все выглядит ) кто как это обходит - неприятная "непроработка" (имхо, все же определенная переменная a<>b, при b=null должна возвращать true) в языке. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2004, 23:12 |
|
Pl\pgSQL questions
|
|||
---|---|---|---|
#18+
Читайте доки - там все есть! и про: "is null ..." "not is null ..." и про SQL: "select $1 as a, $2 as b ..." ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2004, 10:14 |
|
Pl\pgSQL questions
|
|||
---|---|---|---|
#18+
по селекту у меня как раз не SQL а pgSQL ... про null not null читал, а также практически всю доку перелопатил - внятного решения проблемы - не нашел. может, если такой гуру - ткнете конкретно в раздел\страницу ? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2004, 22:15 |
|
Pl\pgSQL questions
|
|||
---|---|---|---|
#18+
Между прочим ни слова в исхоном посте ни о версии postgres ни о структуре таблицы. Пока что в 7.4 я не повторить ситуацию с конструкцией IF OLD.a != NEW.a then else end if полчуил ожидаемый результат - управление передатеся как положено. Может я что-то не так понял -завтра еще раз попробую перепроверить 8) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2004, 23:25 |
|
Pl\pgSQL questions
|
|||
---|---|---|---|
#18+
7.4.1 версия. Хмм... у меня стабильно если в триггере приходит null то при таком сравнении всегда false. Структура таблицы - не важна, на всех такое дело, независимо от структуры. попробуй на переменных провести опыт - по умолчанию declared переменная - null вроде. вот и функция примерно такого вида Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
а по первому вопросу есть идеи какие-нить ? как это сваять ??? для пояснения - нужна например функция которая по переданным параметрам (строка полей, имя поля, таблица) формирует упорядоченный список distinct "строка полей" from "таблица" потом пронумеровывает эти строки спец образом (любым, уже реализовано) и делает в эту же таблицу апдейт "имя поля" = номер это примерно вот так должно в результате выглядеть select distinct f1,f2,key_field from a F1----F2----key_field a ---- a---- 1 a ---- b---- 2 b ---- a---- 3 при этом строк типа a-a-1 (и др.) может быть много... хочется чтобы такая функция работала на любую переданную таблицу. пришедшую строку полей разбираем по "," и сможем загнать имена полей в переменные, но как потом при выборке для апдейта сформировать условия where ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2004, 09:46 |
|
|
start [/forum/topic.php?fid=53&msg=32442899&tid=2007927]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
61ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
others: | 308ms |
total: | 467ms |
0 / 0 |