powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Перевод кода из MS SQL на PostgreSQL
11 сообщений из 11, страница 1 из 1
Перевод кода из MS SQL на PostgreSQL
    #39420753
SergPlusPlus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть вот такой вопрос: мигрируем с MS SQL на PostgreSQL, и пока что не получается разобраться с одним моментом:
на MS SQL мы зачастую писали, не оформляя в виде функций, вот такой код:

declare @topid int
select top 1 @topid=id from tbl_a

select * from tbl_b where tbla_id=@topid
select * from tbl_c where tbla_id=@topid

Это не реальный, это некий демо-код, прошу к нему не придираться. Главная идея - выбирались несколько таблиц одновременно, и притом выборка шла с использованием некоторой предварительно вычисленной переменной.

Какой аналог этому есть в постгресе?
...
Рейтинг: 0 / 0
Перевод кода из MS SQL на PostgreSQL
    #39420793
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergPlusPlus,

Писать такой вот код в ПЖ возможности нет.

Что вроде такого:
Код: sql
1.
2.
3.
4.
5.
6.
WITH t AS (
  SELECT id AS tbla_id FROM tbl_a ORDER BY id LIMIT 1
)
SELECT tbl_b.* FROM tbl_b JOIN t USING (tbla_id)
UNION ALL
SELECT tbl_c.* FROM tbl_c JOIN t USING (tbla_id);


`LIMIT` надо использовать с `ORDER BY`, а так должно быть аналогично.
...
Рейтинг: 0 / 0
Перевод кода из MS SQL на PostgreSQL
    #39420852
SergPlusPlus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо, норм.
orderby не писал, т.к. это демо-код. На самом деле у меня долгое и упорное вычисление, в результате получалась некая id,которая и идет дальше работать.
...
Рейтинг: 0 / 0
Перевод кода из MS SQL на PostgreSQL
    #39420869
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergPlusPlus,

select set_config(TEXT,BOOLEAN)
select current_setting(TEXT)
Сессионные переменные контекста.
...
Рейтинг: 0 / 0
Перевод кода из MS SQL на PostgreSQL
    #39420875
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ещё вариант
Код: plsql
1.
2.
3.
4.
5.
6.
DO $$
DECLARE
--любые переменные какие хошь
BEGIN
-- любой текст на pl/pgsql
END $$
...
Рейтинг: 0 / 0
Перевод кода из MS SQL на PostgreSQL
    #39420879
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Единственное что - код выполняется блоком.
И возвращает void.
Это удобнее для какого-то сложного кода, например, супер отчёта.
...
Рейтинг: 0 / 0
Перевод кода из MS SQL на PostgreSQL
    #39420908
SergPlusPlus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DO $$
DECLARE
....

решает проблему с переменными, но к сожалению не позволяет вернуть пару табличек.
Если это действительно сложный отчет - то не стыдно результаты и записать в БД в какие-нибудь таблички.

А если это рядовая операция, которая оперативно тащит пару строк по человеку - то тут уже и временные таблицы не вариант.
Вот в этом-то и вопрос - как задекларить переменную и при этом вернуть пару табличек.
...
Рейтинг: 0 / 0
Перевод кода из MS SQL на PostgreSQL
    #39420953
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergPlusPlus,
Есть вариант внутри блока - создать курсоры. Но это не очень хороший вариант
(чисто ИМХО). Также можно создать таблицы-времянки.
Если честно, то мне это ни разу не пригодилось. Поскольку в 99% случаях
наборы данных используются для каких-либо операций далее.
Либо в пределах того же запроса, либо - если совсем труба -
RECORD псевдотип в циклах.
Оставшийся 1% - ошибка в постановке задачи либо её восприятия.
...
Рейтинг: 0 / 0
Перевод кода из MS SQL на PostgreSQL
    #39420955
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для отчётов-монстров применяю времянки. Но это пара отчётов
на всю мегабазу
...
Рейтинг: 0 / 0
Перевод кода из MS SQL на PostgreSQL
    #39420958
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergPlusPlusDO $$
DECLARE
....

решает проблему с переменными, но к сожалению не позволяет вернуть пару табличек.
Если это действительно сложный отчет - то не стыдно результаты и записать в БД в какие-нибудь таблички.

А если это рядовая операция, которая оперативно тащит пару строк по человеку - то тут уже и временные таблицы не вариант.
Вот в этом-то и вопрос - как задекларить переменную и при этом вернуть пару табличек.
А вообще - правильнее бы выложить код, который надо переложить на новую СУБД.
...
Рейтинг: 0 / 0
Перевод кода из MS SQL на PostgreSQL
    #39420959
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или алгоритм что делается, каким образом формируется итоговый отчёт.
100% можно решить изящнее.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Перевод кода из MS SQL на PostgreSQL
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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