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

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

16.12.2022, 18:28. Показов 2442. Ответов 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
1264 / 978 / 384
Регистрация: 02.09.2012
Сообщений: 3,021
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
1264 / 978 / 384
Регистрация: 02.09.2012
Сообщений: 3,021
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
1264 / 978 / 384
Регистрация: 02.09.2012
Сообщений: 3,021
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
Ответ Создать тему
Новые блоги и статьи
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru