Использование переменной в функции со скриптом sql и sh - PullRequest
1 голос
/ 31 января 2020

Я разрабатываю набор сценариев. 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

Таким образом, он не интерпретируется, но используется функцией.

Можете ли вы помочь мне найти решение, которое беспокоило меня долгое время. Спасибо:)

1 Ответ

1 голос
/ 31 января 2020

Вы можете заставить psql заключить значение переменной в одинарные кавычки:

SELECT myFunction (:'var1');

Это будет заменено на

SELECT myFunction ('schema.table');
...