powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Pl\pgSQL questions
5 сообщений из 5, страница 1 из 1
Pl\pgSQL questions
    #32442651
centur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть парочка =)
1. Как можно пройтись по RECORD в цикле
Код: plaintext
1.
for record in execute query loop
end loop;

если 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) в языке.
...
Рейтинг: 0 / 0
Pl\pgSQL questions
    #32442899
Vladimir K.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Читайте доки - там все есть!
и про: "is null ..." "not is null ..."
и про SQL: "select $1 as a, $2 as b ..."
...
Рейтинг: 0 / 0
Pl\pgSQL questions
    #32448243
centur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по селекту у меня как раз не SQL а pgSQL ...
про null not null читал, а также практически всю доку перелопатил - внятного решения проблемы - не нашел. может, если такой гуру - ткнете конкретно в раздел\страницу ?
...
Рейтинг: 0 / 0
Pl\pgSQL questions
    #32448279
Shweik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Между прочим ни слова в исхоном посте ни о версии postgres ни о структуре таблицы.
Пока что в 7.4 я не повторить ситуацию с конструкцией
IF OLD.a != NEW.a then
else
end if
полчуил ожидаемый результат - управление передатеся как положено.
Может я что-то не так понял -завтра еще раз попробую перепроверить 8)
...
Рейтинг: 0 / 0
Pl\pgSQL questions
    #32448512
centur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
7.4.1 версия.

Хмм... у меня стабильно если в триггере приходит null то при таком сравнении всегда false.
Структура таблицы - не важна, на всех такое дело, независимо от структуры.


попробуй на переменных провести опыт - по умолчанию declared переменная - null вроде. вот и функция примерно такого вида


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
func
'
declare
a int
b int

begin
b:=100; (a - null т.к. не определяем)
if a!=b then 
raise notice '' if'' ;
else 
raise notice '' else'' ;
end if 
end;'



а по первому вопросу есть идеи какие-нить ? как это сваять ???
для пояснения - нужна например функция которая по переданным параметрам (строка полей, имя поля, таблица)
формирует упорядоченный список 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
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Pl\pgSQL questions
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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