powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Присвоение значению элементу композитного типа
4 сообщений из 4, страница 1 из 1
Присвоение значению элементу композитного типа
    #39169904
igoro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Версия 9.3.
Объявляю два композитных типа.
Приведенный ниже пример доступа к полям работает корректно.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
drop type if exists xxx;
drop type if exists yyy;
create type yyy as (id numeric, v numeric);
create type xxx as (id numeric, a yyy);
do $$
declare
z xxx;
a yyy;
i int;
begin
    a.id := 0;
    z.a := a;
   raise notice '%', (z.a).id;
--   (z.a).id := 0;
end;
   $$ 


А попытка присвоить элементу композитного типа значение оператором:
Код: plsql
1.
(z.a).id := 0;


приводит к синтаксической ошибке.
Существует ли способ присваивания значения отдельным элементам второго уровня?
...
Рейтинг: 0 / 0
Присвоение значению элементу композитного типа
    #39171033
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
igoro,
postgresql - субд, требующая жёсткой типизации.
0 у вас - скорее всего инт.
Попробуйте явное преобразование.
...
Рейтинг: 0 / 0
Присвоение значению элементу композитного типа
    #39171047
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОКТОГЕН,

что-то вы мимо тазика. при чём тут типизация ?
постгрес не может налить в поле второго уровня вложенности. (так же как, например, аппендить двумерные массивы просто присвоением элемента)

но на самом деле тут ничего страшного -- поскольку, судя по всему, когда вы "наливаете поле в компаунд" вы, на деле, перекопируете весь компаунд, и в этой копии меняете поле.

могу врать, но судя по поведению inout-ов, на то похоже (любой оператор -- функция, любая функция принимает значение (копию) переданного, и работает над ней). если было бы по другому -- компаунд мог бы лежать полем на диске, и вы прямо по ссылке переписывали бы поле, в обход транзакционности, версионности и всего такого прочего. А иметь собственные ссылочные [про которые заведомо было бы известно, что они не поля записи с диска] типы plpgsql не умеет. не положено, типа.
...
Рейтинг: 0 / 0
Присвоение значению элементу композитного типа
    #39171395
igoro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Присвоение значению элементу композитного типа
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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