В настоящее время я использую Postgres, и я хочу создать функцию connivence, чтобы сократить некоторые повторения в моих скриптах.Вызов функции INSERT inline из сценария
У меня есть функция, определенная следующим образом:
CREATE FUNCTION add_entry(i smallint, m varchar, t varchar) RETURNS VOID AS $$
BEGIN
INSERT INTO metrics(id, medium, metric) VALUES (i, m, t);
END
$$ LANGUAGE 'plpgsql';
Затем я хочу, чтобы вызвать функцию в моем сценарии следующим образом:
SELECT add_entry(3, "hello", "world");
Когда я называю сценарий с определением функции в начало сценария, а затем последующие вызовы функции, генерируется следующая ошибка:
psql:static-data.sql:7: ERROR: function "add_entry" already exists with same argument types
SELECT "add_entry"(3, "hello", "world");
psql:static-data.sql:9: ERROR: column "hello" does not exist
LINE 1: SELECT "add_entry"(3, "hello", "world");
Проблема заключается в том, что когда я вызываю функцию, она ведет себя как переопределение функции.
Как решить эту проблему и напрямую вызвать функцию? Большое спасибо за Вашу помощь!
О, это имеет смысл. Есть ли способ заставить переопределить функцию. Как сбросить предыдущую функцию и переопределить ее? –
Отлично, я вижу ваш обновленный ответ; Спасибо большое! –
@JamesTaylor Обратите внимание, что 'CREATE или REPLACE FUNCTION' может быть придирчивым иногда, например. он не позволит вам просто изменить имя переменной. Поэтому иногда вам, возможно, придется сначала отбросить функцию. – redneb