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

Проблемы с созданием процедуры

17.11.2022, 17:17. Показов 740. Ответов 5

Студворк — интернет-сервис помощи студентам
Здравствуйте, имеется такой скрипт хранимой процедуры для MSSQL(упрощенный пример, на самом деле, еще используются JOIN'ы)
SQL
1
2
3
4
5
6
7
CREATE PROCEDURE TestProcedure
    @COLUMNS VARCHAR(MAX), 
    @TABLE VARCHAR(MAX)
AS
    DECLARE @query VARCHAR(MAX) = 'SELECT '+@COLUMNS+' FROM    '+@TABLE+';';
    EXECUTE (@query);
GO
Необходимо создать процедуру с такой же логикой для postgre.
Столкнулся с такой проблемой, что необходимо указывать возвращаемый тип. Используя тип RECORD, метод ExecuteDataTable класса BLToolkit.Data.DbManager прерывается исключением ERROR: 42601: a column definition list is required for functions returning "record".
Вернуть просто таблицу нет возможности, так как заранее не известен список и тип столбцов в переменной @columns.

Как должен выглядеть скрипт создание хранимой процедуры для postgre?

Добавлено через 2 часа 36 минут
Написал хранимую процедуру с использованием курсора, но по итогу, в коде обрабатывается таблица с одним столбцом, одноименный с хранимой процедурой, но количество строк верное.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.11.2022, 17:17
Ответы с готовыми решениями:

Проблемы с созданием сущностей и ключей
Во время создание в PgAdmin ругается на длину переменных. Ссылку на диаграму ERD прилагаю: https://ibb.co/ngirdA. Как исправить данный...

Проблемы с созданием процедуры
Есть условие:Создать хранимую процедуру, которая выводит количество сделанных деталей заданного наименования и в случае отсутствия заказов...

Проблемы с созданием "контактов" в Access
При создании "Контактов" всплывает окно с текстом: "приложение "Microsoft Access" не удалось создать модуль Visual...

5
55 / 50 / 5
Регистрация: 30.06.2022
Сообщений: 251
17.11.2022, 17:25
Насколько большая таблица/выборка?
Если гиг и меньше, то есть вариант возвращать тип JSONB который потом и парсить.
Или ещё вариант - таблица с одним столбцом типа JSONB который содержит запись, которую парсить как угодно и чем угодно.

Добавлено через 1 минуту
Но тогда к структуре результирующей записи желательно применить ограничения по длинне, в идеале фиксированную, чтоб сюрпризов не было.
0
0 / 0 / 0
Регистрация: 03.07.2015
Сообщений: 9
17.11.2022, 19:23  [ТС]
менять код и добавлять сериализацию - не вариант, нужна обратная совместимость с mssql...
0
55 / 50 / 5
Регистрация: 30.06.2022
Сообщений: 251
17.11.2022, 19:32
Тогда видимо так как вы сделали - единственно возможное решение.
1
0 / 0 / 0
Регистрация: 03.07.2015
Сообщений: 9
17.11.2022, 23:35  [ТС]
Цитата Сообщение от oktogen Посмотреть сообщение
Тогда видимо так как вы сделали - единственно возможное решение.
Увы, но хранимка с курсором непонятные данные возвращает: вместо десятка столбцов - один. Буду дальше разбираться.
0
1265 / 979 / 384
Регистрация: 02.09.2012
Сообщений: 3,026
18.11.2022, 22:32
Лучший ответ Сообщение было отмечено danxhim как решение

Решение

Цитата Сообщение от danxhim Посмотреть сообщение
Увы, но хранимка с курсором непонятные данные возвращает: вместо десятка столбцов - один. Буду дальше разбираться.
Может где-то ошиблись?! С курсором вроде рабочий вариант должен быть.
Попробуйте так
1) создать функцию, которая открывает курсор и возвращает refcursor (см. здесь)
2) далее в вызываемом контексте создать транзакцию в рамках которой вызвать вашу функцию
3) сделать fetch all из созданного курсора
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.11.2022, 22:32
Помогаю со студенческими работами здесь

Помогите с созданием процедуры
Создать процедуру, формирующую вектор из максимальных элементов диагоналей целочисленного квадратного массива, параллельных его главной...

Проблемы с созданием формы
Здравствуйте, вот попытался создать свою первую форму, все получилось, но в WNDCLASSEX есть еще 1 функция, которую я не смог понять, как...

Проблемы с созданием вектора
#include <iostream> #include <vector> using namespace std; int main(){ vector <int> a = {1, 2, 3}; } Здравствуйте!...

Проблемы с созданием объектов
Описан класс TPlanet: TPlanet = class (TObject) public name: string; x,y,m,r,px,py,vx,vy,ax,ay: real; u,v,up,vp:integer; ...

Проблемы с созданием сервиса
Добрый день Создаю сервисную службу вот так http://habrahabr.ru/post/102826/. Но потом не вижу в службах что она там появилась. Там...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 30.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru