powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Преобразование типов
3 сообщений из 3, страница 1 из 1
Преобразование типов
    #35518598
RomanT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, имеется два вопроса.
1)
Приведенный ниже код является рабочим, в данном случае возвращается одна строка.
Код: plaintext
1.
2.
SELECT *
FROM CAST(ROW( 1 ,  2 ) AS SETOF RECORD) AS t(a INTEGER, b INTEGER)
Можно ли написать так, чтобы возвращался набор данных, при этом не используя функций?

2) Запросы
Код: plaintext
SELECT ARRAY[ROW( 1 ,  2 )];
и
Код: plaintext
SELECT ARRAY(SELECT ROW( 1 ,  2 ));
возвращают ошибку "ERROR: could not find array type for datatype record" , так как требуется наличие
заранее определенного типа с помошью оператора
Код: plaintext
CREATE TYPE
, к примеру
Код: plaintext
CREATE TYPE t1 AS (a INTEGER, b INTEGER);
.
Рабочий код:
Код: plaintext
SELECT ARRAY[CAST(ROW( 1 ,  2 ) AS t1), CAST(ROW( 3 ,  4 ) AS t1)];
Можно ли написать запрос так, чтобы он выполнялся без предварительного создания типа?

P.S. Вопросы носят теоретический характер.
...
Рейтинг: 0 / 0
Преобразование типов
    #35518930
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RomanTПриведенный ниже код является рабочим, в данном случае возвращается одна строка.
Код: plaintext
1.
2.
SELECT *
FROM CAST(ROW( 1 ,  2 ) AS SETOF RECORD) AS t(a INTEGER, b INTEGER)
Можно ли написать так, чтобы возвращался набор данных, при этом не используя функций?
так ?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
seb=> select * from (values ( 1 ,  2 ), ( 3 ,  4 ), ( 5 ,  6 )) as x(a,b);
 a | b
---+---
  1  |  2 
  3  |  4 
  5  |  6 
( 3  rows)
...
Рейтинг: 0 / 0
Преобразование типов
    #35518971
RomanT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ёш RomanTПриведенный ниже код является рабочим, в данном случае возвращается одна строка.
Код: plaintext
1.
2.
SELECT *
FROM CAST(ROW( 1 ,  2 ) AS SETOF RECORD) AS t(a INTEGER, b INTEGER)
Можно ли написать так, чтобы возвращался набор данных, при этом не используя функций?
так ?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
seb=> select * from (values ( 1 ,  2 ), ( 3 ,  4 ), ( 5 ,  6 )) as x(a,b);
 a | b
---+---
  1  |  2 
  3  |  4 
  5  |  6 
( 3  rows)

Красивый запрос.
В приведенном мной примере запрос делается из функции CAST - функция (псевдо функия) CAST возвращает SETOF RECORD, и поэтому возможно делать преобразование " AS t(a INTEGER, b INTEGER)" насколько я понял. Можно ли таким же образом вернуть не одну запись, а набор данных - что-то типа
Код: plaintext
SELECT a,b FROM (/*Какие-то преобразования*/SELECT * FROM (VALUES (ROW( 1 ,  2 )), (ROW( 3 ,  4 )), (ROW( 5 ,  6 ))) AS x(f));
?
Можно конечно написать пользовательскую функцию.

Интересно сделать так, чтобы это можно было преобразовать в композитный тип.
Код: plaintext
SELECT * FROM (VALUES (ROW( 1 ,  2 )), (ROW( 3 ,  4 )), (ROW( 5 ,  6 ))) AS x(f);
Можно ли теперь из данного композитного типа получить поля не прибегая к созданию типа в БД?
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Преобразование типов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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