Форум программистов, компьютерный форум, киберфорум
PostgreSQL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 16.12.2022
Сообщений: 11

Перевод с MS SQL на PostgreSql

16.12.2022, 18:28. Показов 2409. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!
Помогите пожалуйста с переводом кода с MS SQL на PostgreSql, нужно именно с использованием переменных.
Код упрощен, оставила только самое главное.
Перепробовала кучу вариантов, но никак не получается самой разобраться.
Очень надеюсь на Вашу помощь.
SQL
1
2
3
4
5
6
7
8
9
10
11
12
   CREATE TABLE #ITOG (
       [ИНН] VARCHAR(100) NULL
    );
 
    DECLARE @RISK AS INT = (SELECT COUNT([ИНН])
                                             FROM #MY_TABLE
                                             WHERE [УСЛОВИЕ] = 'HIGH')
    SET @QUERY = 'SELECT TOP ' + CONVERT(VARCHAR(100),@RISK) + '[ИНН]
                            FROM #MY_TABLE
                            WHERE [УСЛОВИЕ] = ''HIGH'''
    INSERT INTO #ITOG
        EXEC(@QUERY_LIST_1);
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.12.2022, 18:28
Ответы с готовыми решениями:

Перевод кода с Postgresql в sql server
Есть ли возможность перевести код из Postgresql в sql server? CREATE TYPE GENDER_TYPE AS ENUM ('Мужской','Женский');...

Чем PostgreSQL отличается от T-SQL?
Чем PostgreSQL отличается от T-SQL, нашел классные курсы по PostgreSQL, но мне нужен T-SQL, могу ли я учить PostgreSQL и применять в T-SQL?...

Как перенести БД из MS SQL в PostgreSQL?
Добрый, подскажите плиз как перенести БД из MS SQL в PostgreSQL?

8
1263 / 977 / 384
Регистрация: 02.09.2012
Сообщений: 3,020
16.12.2022, 21:03
Что перепробовали??
А то сейчас начнут писать варианты, которые вы перепробовали и они вам не подошли.
0
 Аватар для Аватар
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
16.12.2022, 22:47
а оно работает в первоисточнике? что такое например @QUERY_LIST_1 ? временные таблицы и динамические запросы в postgresql есть. в чем проблема то? не в курсе insert из динамики съест postgresql или нет, но в любои случае в динамику можно и insert вместе с запросом запихнуть
0
0 / 0 / 0
Регистрация: 16.12.2022
Сообщений: 11
17.12.2022, 11:03  [ТС]
Поправила запрос:
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
CREATE TABLE #ITOG (
[ИНН] VARCHAR(100) NULL
);
DECLARE @QUERY AS VARCHAR(MAX) = '';
 
DECLARE @RISK AS INT = (SELECT COUNT([ИНН])
FROM #MY_TABLE
WHERE [УСЛОВИЕ] = 'HIGH')
SET @QUERY = 'SELECT TOP ' + CONVERT(VARCHAR(100),@RISK) + '[ИНН]
FROM #MY_TABLE
WHERE [УСЛОВИЕ] = ''HIGH'''
INSERT INTO #ITOG
EXEC(@QUERY);
 
[SIZE="1"][color="grey"][I]Добавлено через 8 минут[/I][/color][/SIZE]
Запрос работает в первоисточнике. @QUERY_LIST_1 это @QUERY, просто забыла везде переименовать.
Если бы не было проблем, то не писала бы сюда)
На данный момент у меня написан данный кусок.
DO $$
DECLARE
    v_risk_high         INT;
 
BEGIN
    DROP TABLE IF EXISTS itog;
    CREATE LOCAL TEMP TABLE itog (
        client_inn text NULL
    );
 
    v_risk_high := (SELECT COUNT(inn)
                           FROM mytable
                           WHERE nm = 'High');
END $$;
 
У меня не получается записать эти строчки :
SET @QUERY = 'SELECT TOP ' + CONVERT(VARCHAR(100),@RISK) + '[ИНН]
FROM #MY_TABLE
WHERE [УСЛОВИЕ] = ''HIGH'''
INSERT INTO #ITOG
EXEC(@QUERY);
0
 Аватар для Аватар
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
17.12.2022, 13:42
CREATE LOCAL TEMP TABLE itog (
client_inn text null
);

Oracle 11 SQL
1
CREATE LOCAL TEMP TABLE itog (client_inn VARCHAR(100) NULL);
и так примерно в динамику insert вместе с запросом
Oracle 11 SQL
1
EXECUTE format('INSERT INTO itog (client_inn) select client_inn FROM mytable order by client_inn limit @1;') USING v_risk_high;
язык еще указать

Добавлено через 5 минут
ps - лень проверить позволяет ли postgresql в лимите выражение использовать, по справке вроде нельзя, но если можно то и динамика не нужна, проверь на досуге )
0
1263 / 977 / 384
Регистрация: 02.09.2012
Сообщений: 3,020
19.12.2022, 23:35
Лучший ответ Сообщение было отмечено Valery9136 как решение

Решение

Не очень понятно, зачем тут запрос с COUNT()?!
У вас и запрос с COUNT() и запрос с TOP возвращают одно и тоже количество записей.
Было бы логичнее, если бы для TOP было бы какое-то меньшее число из другого параметра / запроса (ну и ORDER BY однозначный нужен обязательно тогда, чтобы был детерминированный выбор записей).
Напрашивается вывод, что вы, вероятно какой-то макет кода рассматриваете, чтобы потом сделать финальную версию / усложнить / расширить.

Исходя из этого подправлю буквально немного коллегу выше
а) параметры для EXECUTE нумеруются со знака доллар: $1, $2.... (не @1...)
б) насколько я помню для LIMIT можно указать параметр, так как подставляется значение, а не идентификатор (таблицы, колонки и т.п.);
в) используйте функции quote_literal и %s - параметр функции format (обратите внимание - это не имеет отношения к EXECUTE) чтобы не мучатся с "кавычками в кавычках";
г) лучше везде используйте тип text вместо varchar/varchar(n), избавите себя от лишней писанины;

наверно как-то так можно переписать

Oracle 11 SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
DO $$
DECLARE
    v_risk_high INTEGER;
BEGIN
    DROP TABLE IF EXISTS itog;
    CREATE temp TABLE itog (
        client_inn text NULL
    );
 
    v_risk_high := (SELECT COUNT(inn)
                           FROM mytable
                           WHERE nm = 'High');
 
    EXECUTE format(
        'insert into itog (client_inn) '
        'select inn from mytable'
            ' where nm = %s'
            ' order by nm'
            ' limit $1',
        quote_literal('High'))
    USING v_risk_high;
END $$;
0
0 / 0 / 0
Регистрация: 16.12.2022
Сообщений: 11
22.12.2022, 17:40  [ТС]
Спасибо большое за помощь.
Запрос с COUNT() был необходим, потому что у меня есть большая процедура для перевода с MS SQL, и чтобы сильно не вникать в логику, то я сократила запрос до минимума.

Остался один вопрос, а как в данном случае ограничить количество строк, например если мне нужна только одна строка?
Если писать так , то выдает ошибку:
SQL
1
2
3
4
5
6
7
8
9
10
11
12
    IF v_risk_low <= ((v_cnt_acc- v_risk_high) / 3) :: BIGINT
        THEN
            EXECUTE FORMAT (
                'INSERT INTO itog
                 SELECT inn
                 FROM mytable
                 WHERE kyc_rsk_lvl_final_nm = ''Low''
                 ORDER BY inn
                 LIMIT $1[1] :: bigint'
            )
            USING v_risk_low;
        END IF;
0
1263 / 977 / 384
Регистрация: 02.09.2012
Сообщений: 3,020
22.12.2022, 22:05
Ну просто написать "LIMIT 1" после ORDER BY без всякой подстановки параметров.
Зачем квадратные скобки, какой смысл в них??
1
-4 / 2 / 0
Регистрация: 10.02.2022
Сообщений: 278
23.12.2022, 09:36
для начало сравнить операторы двух SQL\PL языков или он уже переведен на постгрисикквел?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.12.2022, 09:36
Помогаю со студенческими работами здесь

Создание SQL запроса PostgreSQL
Здравсвуйте нужноо вообщем сделать скл запрос как бы и потом результаты этого запроса выгрузить в qtablewidget вот структура проекта ...

Хранимая процедура. PostgreSQL,SQL
Ребят, у меня есть небольшой вопрос. Как создавать &quot;Хранимую процедуру&quot; в PostgreSQL, посколько не могу что-то разобраться. Есть...

Перевод имён таблиц и столбцов в нижний регистр в базе Postgresql
Доброго времени суток, не могу перевести имена таблиц и столбцов в нижний регистр в базе Postgresql. На просторах интернета нашёл...

Хранимая процедура SQL в функцию PostgreSQL
Программа работала с обычной базой данных MS SQL (разработка велась с помощью Visual Studio 17 на языке C#), но появилась нужда создать...

Выборка из PostgreSQL с переменной в SQL выражении
У меня есть база данных со столбцом city Когда я хочу ,чтобы пользователь выбрал город мне выдает ошибку: &quot; ОШИБКА: столбец...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru