|
Перевод кода из MS SQL на PostgreSQL
|
|||
---|---|---|---|
#18+
Есть вот такой вопрос: мигрируем с 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 Это не реальный, это некий демо-код, прошу к нему не придираться. Главная идея - выбирались несколько таблиц одновременно, и притом выборка шла с использованием некоторой предварительно вычисленной переменной. Какой аналог этому есть в постгресе? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2017, 13:47 |
|
Перевод кода из MS SQL на PostgreSQL
|
|||
---|---|---|---|
#18+
SergPlusPlus, Писать такой вот код в ПЖ возможности нет. Что вроде такого: Код: sql 1. 2. 3. 4. 5. 6.
`LIMIT` надо использовать с `ORDER BY`, а так должно быть аналогично. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2017, 14:14 |
|
Перевод кода из MS SQL на PostgreSQL
|
|||
---|---|---|---|
#18+
спасибо, норм. orderby не писал, т.к. это демо-код. На самом деле у меня долгое и упорное вычисление, в результате получалась некая id,которая и идет дальше работать. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2017, 14:53 |
|
Перевод кода из MS SQL на PostgreSQL
|
|||
---|---|---|---|
#18+
SergPlusPlus, select set_config(TEXT,BOOLEAN) select current_setting(TEXT) Сессионные переменные контекста. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2017, 15:22 |
|
Перевод кода из MS SQL на PostgreSQL
|
|||
---|---|---|---|
#18+
Ещё вариант Код: plsql 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2017, 15:27 |
|
Перевод кода из MS SQL на PostgreSQL
|
|||
---|---|---|---|
#18+
Единственное что - код выполняется блоком. И возвращает void. Это удобнее для какого-то сложного кода, например, супер отчёта. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2017, 15:29 |
|
Перевод кода из MS SQL на PostgreSQL
|
|||
---|---|---|---|
#18+
DO $$ DECLARE .... решает проблему с переменными, но к сожалению не позволяет вернуть пару табличек. Если это действительно сложный отчет - то не стыдно результаты и записать в БД в какие-нибудь таблички. А если это рядовая операция, которая оперативно тащит пару строк по человеку - то тут уже и временные таблицы не вариант. Вот в этом-то и вопрос - как задекларить переменную и при этом вернуть пару табличек. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2017, 16:11 |
|
Перевод кода из MS SQL на PostgreSQL
|
|||
---|---|---|---|
#18+
SergPlusPlus, Есть вариант внутри блока - создать курсоры. Но это не очень хороший вариант (чисто ИМХО). Также можно создать таблицы-времянки. Если честно, то мне это ни разу не пригодилось. Поскольку в 99% случаях наборы данных используются для каких-либо операций далее. Либо в пределах того же запроса, либо - если совсем труба - RECORD псевдотип в циклах. Оставшийся 1% - ошибка в постановке задачи либо её восприятия. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2017, 16:50 |
|
Перевод кода из MS SQL на PostgreSQL
|
|||
---|---|---|---|
#18+
Для отчётов-монстров применяю времянки. Но это пара отчётов на всю мегабазу ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2017, 16:51 |
|
Перевод кода из MS SQL на PostgreSQL
|
|||
---|---|---|---|
#18+
SergPlusPlusDO $$ DECLARE .... решает проблему с переменными, но к сожалению не позволяет вернуть пару табличек. Если это действительно сложный отчет - то не стыдно результаты и записать в БД в какие-нибудь таблички. А если это рядовая операция, которая оперативно тащит пару строк по человеку - то тут уже и временные таблицы не вариант. Вот в этом-то и вопрос - как задекларить переменную и при этом вернуть пару табличек. А вообще - правильнее бы выложить код, который надо переложить на новую СУБД. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2017, 16:53 |
|
|
start [/forum/topic.php?fid=53&fpage=77&tid=1996650]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
35ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
2ms |
others: | 335ms |
total: | 465ms |
0 / 0 |