ПРОБЛЕМА:
У меня проблемы с функцией, которую я создал в Postgres (9.1) с языком plpgsql. Я из мира SQL Server, поэтому здесь есть небольшой языковой разрыв.
Моя проблема в том, что postgres, похоже, не назначает параметры, которые я передаю правильно.
Вот мое определение функции:
CREATE OR REPLACE FUNCTION func1 (
IN param1 character varying,
IN param2 character varying DEFAULT NULL::character varying,
IN param3 int DEFAULT NULL::int)
RETURNS void
AS $$
BEGIN
INSERT INTO table1
(
col1
, col2
, col3
)
VALUES
(
$1
, $2
, $3
)
END;
$$ LANGUAGE plpgsql;
Сама функция отлично работает при тестировании в среде базы данных, но в настоящее время я пытаюсь вызвать ее из C ++ через соединение ODBC.
Вот где я устанавливаю параметры:
pCmd->paramIn( "param1", (char *)name.getString().c_str() );
pCmd->paramIn( "param3", 100 );
В этом случае я не назначил param2 никакому значению. Это обнуляемо - не должно быть проблемой.
Я получаю ошибку:
ОШИБКА: функция func1 (неизвестно, целое число) не существует;
Из того, что я вижу, вызов пытается назначить параметры по порядку, игнорируя имена параметров.
ВОПРОС:
1 - Как я могу вызвать эту функцию, чтобы заставить эту работу? Должен ли я передать "NULL" в качестве отсутствующих параметров и убедиться, что они все в порядке?
2 - Если я использую соединение ODBC, которым я, безусловно, являюсь, я должен вызвать функцию языка SQL, которая, в свою очередь, вызывает функцию PLPGSQL? Это немного запутанно, но я был бы готов попробовать.
3 - (не вопрос) Пожалуйста, не предлагайте: «Не используйте ODBC». Также, пожалуйста, не пытайтесь изменить внутреннюю часть функции, если в этом нет необходимости. Сейчас моя главная задача - узнать, как выполнить вызов функции в postgres через ODBC.
Спасибо всем заранее, что нашли время, чтобы прочитать это, и большое спасибо всем, кто отвечает.
UPDATE:
Вот DboCommand:
DboCommand *cmd;
cmd = new DboCommand(dbConnection, "{call func1 (?) (?)}");
Который раньше был этим
cmd = new DboCommand(dbConnection, "func1");
Теперь ошибка:
количество связанных параметров <количество маркеров параметров </p>