Я разрабатываю набор сценариев. sql, которые будут вызываться сценарием. sh. В этом сценарии. sh я использую команду:
psql "connection parameters" -f ./myscript.sql -v var1 = "schema.table"
На данный момент все хорошо.
В моем сценарии. sql у меня сейчас есть:
CREATE or replace FUNCTION myFunction (tarteenpion varchar) RETURNS void AS $$
DECLARED
MONTH_MM varchar: = to_char (current_timestamp, 'MM');
YEAR_AAAA varchar: = to_char (current_timestamp, 'YYYY');
YEAR_AA varchar: = to_char (current_timestamp, 'YY')
cmd varchar: = 'DROP TABLE IF EXISTS' || tarteenpion || ';' ;
BEGIN
execute cmd;
END;
$$ LANGUAGE plpgsql;
--SELECT myFunction ('schema.table');
SELECT myFunction (: var1);
DROP FUNCTION myFunction (tarteenpion varchar);
Моя проблема возникла из-за использования моей внешней переменной: var1 - если я непосредственно записываю свое значение 'schema.table' в ', функция работает правильно. Но я не хочу этого.
- Если я напишу свою переменную: var1 БЕЗ 'У меня есть эта ошибка
SELECT myFunction (: var1); => ОШИБКА: отсутствует запись в предложении FROM для таблицы "схема"
ЛИНИЯ 1: ВЫБРАТЬ myFunction (schema.table);
Таким образом, она интерпретируется как неиспользуемая функцией .
- Если я напишу свою переменную ': var1' С 'У меня есть эта ошибка
SELECT myFunction (': var1 '); => ОШИБКА: синтаксическая ошибка в или около ":"
ЛИНИЯ 1: DROP TABLE ЕСЛИ СУЩЕСТВУЕТ: var1
Таким образом, он не интерпретируется, но используется функцией.
Можете ли вы помочь мне найти решение, которое беспокоило меня долгое время. Спасибо:)