Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите написать функцию с аргументом / 4 сообщений из 4, страница 1 из 1
05.06.2019, 23:13
    #39823133
bamper78
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать функцию с аргументом
Добрый день.

Прошу помощи написать функцию с аргументом "имя таблицы"

я создал функцию

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
CREATE OR REPLACE FUNCTION public."f_ALTER_TABLE_TO_VARCHAR" (
  table_name varchar
)
RETURNS void AS
$body$
ALTER TABLE table_name
ALTER COLUMN "OGR_Geometry" TYPE VARCHAR;
$body$
LANGUAGE 'sql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER
COST 100;



Но при ее выполнении

Код: plsql
1.
SELECT * FROM public."f_ALTER_TABLE_TO_VARCHAR"(public."Таблица заказов");



получаю ошибку - "public" отсутствует в предложении FROM;
No query has been executed with that handle".

что не так?

Именованный параметр менял на $1, тоже не работает
...
Рейтинг: 0 / 0
05.06.2019, 23:37
    #39823141
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать функцию с аргументом
bamper78,

Во-первых, вы не можете написать аргумент функции как имя объекта. Это неверно синтаксически. Вы написали, что вы хотите передать в функцию значение поля "Таблица заказов" из таблицы public, которая должна быть упомянута в части from запроса.
Корректно будет:
"f_ALTER_TABLE_TO_VARCHAR"('public."Таблица заказов"');
Тип аргумента можно запросить regclass - он проверит, что такой объект существует.

Вторая ошибка в самой хранимке. Структура запроса не может быть параметром. Вам необходимо собрать текст запроса как текст и выполнить его .

Ну и отдельно стоит подумать зачем вы это хотите.
...
Рейтинг: 0 / 0
06.06.2019, 00:26
    #39823156
bamper78
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать функцию с аргументом
Melkij,

Я делаю экспорт данных из MS SQL в PostgreSQL таблиц. В некоторых таблицах требуется менять тип данных перед экспортом и после.

Можно показать как будет выглядеть динамический запрос для
Код: sql
1.
2.
ALTER TABLE table_name
ALTER COLUMN "OGR_Geometry" TYPE VARCHAR;


в функции?
...
Рейтинг: 0 / 0
06.06.2019, 10:51
    #39823298
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать функцию с аргументом
SELECT * FROM public."f_ALTER_TABLE_TO_VARCHAR"(public."Таблица заказов");

SELECT * FROM public."f_ALTER_TABLE_TO_VARCHAR"("Таблица заказов");


и делайте динамический запрос в процедуре с использованием строки-параметра как имени таблицы
типа такого или другого
https://stackoverflow.com/questions/11948131/postgresql-writing-dynamic-sql-in-stored-procedure-that-returns-a-result-set
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите написать функцию с аргументом / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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