PL / pg SQL ERROR: слишком много параметров указано для RAISE - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь поместить более 2 параметров в уведомление о повышении, но я не могу ¿Как я могу это сделать?

CREATE OR REPLACE FUNCTION TABLA_MULT(numeric) RETURNS void AS '
DECLARE 
texto1 TEXT := ''multiplicado por '';
texto2 TEXT := '' es igual a '';
BEGIN
RAISE NOTICE ''TABLA DE MULTIPLICAR DEL %'',$1;
RAISE NOTICE ''=========================='';
FOR i IN 1..10 LOOP
DECLARE result numeric := ($1*i);
BEGIN
RAISE NOTICE ''El número %'',i,texto1,$1,texto2,result;
END;
END LOOP;
END; ' LANGUAGE 'plpgsql';

Ответы [ 2 ]

1 голос
/ 09 апреля 2020

Как указано в руководстве , вам необходим один % для каждого параметра, который должен быть заменен:

Количество аргументов должно соответствовать количеству % заполнителей в строке формата или возникает ошибка во время компиляции функции.

Итак, вам нужно:

RAISE NOTICE 'El número % % % % %',i,texto1,$1,texto2,result;
0 голосов
/ 10 апреля 2020

Не имеет отношения к вашему вопросу, но вы можете исследовать Postgres Строковые константы в кавычках . Это избавляет вас от необходимости заключать двойные кавычки в тело функции. Таким образом, ваша функция (как первоначально опубликовано вами становится):

CREATE OR REPLACE FUNCTION TABLA_MULT(numeric) RETURNS void AS $$
DECLARE 
texto1 TEXT := 'multiplicado por ';
texto2 TEXT := ' es igual a ';
BEGIN
RAISE NOTICE 'TABLA DE MULTIPLICAR DEL %',$1;
RAISE NOTICE '==========================';
FOR i IN 1..10 LOOP
DECLARE result numeric := ($1*i);
BEGIN
RAISE NOTICE 'El número %',i,texto1,$1,texto2,result;
END;
END LOOP;
END; $$ LANGUAGE 'plpgsql';

Было бы также полезно систематически делать отступы для вашего кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...