Error ошибка слишком много параметров для raise

I am trying to run my stored procedure scripts . There are 21 scripts amongst them 18 successfully executed but 3 of them are not executing. One of the script which is failing is given below (I am using PostgreSQL 9.5)

CREATE OR REPLACE FUNCTION create_temp_eid_table (tempPatientMappingTableName IN text ,errorMsg OUT text) 
RETURNS text AS $body$
BEGIN 
    EXECUTE 'create table ' ||  tempPatientMappingTableName || ' (
        ENCOUNTER_MAP_ID        varchar(200) NOT NULL,
        ENCOUNTER_MAP_ID_SOURCE     varchar(50) NOT NULL,
        PROJECT_ID              VARCHAR(50) NOT NULL,
        PATIENT_MAP_ID          varchar(200), 
        PATIENT_MAP_ID_SOURCE   varchar(50), 
        ENCOUNTER_ID            varchar(200) NOT NULL,
        ENCOUNTER_ID_SOURCE     varchar(50) ,
        ENCOUNTER_NUM           numeric, 
        ENCOUNTER_MAP_ID_STATUS    varchar(50),
        PROCESS_STATUS_FLAG     char(1),
        UPDATE_DATE timestamp, 
        DOWNLOAD_DATE timestamp, 
        IMPORT_DATE timestamp, 
        SOURCESYSTEM_CD varchar(50)
    ) WITH OIDS';
    EXECUTE 'CREATE INDEX idx_' || tempPatientMappingTableName || '_eid_id ON ' || tempPatientMappingTableName || '  (ENCOUNTER_ID, ENCOUNTER_ID_SOURCE, ENCOUNTER_MAP_ID, ENCOUNTER_MAP_ID_SOURCE, ENCOUNTER_NUM)';
EXECUTE 'CREATE INDEX idx_' || tempPatientMappingTableName || '_stateid_eid_id ON ' || tempPatientMappingTableName || '  (PROCESS_STATUS_FLAG)';  
EXCEPTION
WHEN OTHERS THEN
    RAISE NOTICE '%%%', SQLSTATE,  ' - ' , SQLERRM;
END;
$body$
LANGUAGE PLPGSQL;

i am getting error stating that

" org.postgresql.util.PSQLException: ERROR: too many parameters specified for RAISE 
Where: compilation of PL/pgSQL function "create_temp_eid_table" near line 23". 
Please check the image for clear error message.

enter image description here

Hey !

We’re trying to upgrade a 1.3.0 datamodel using PUM, but run into a surprising issue… The initial datamodel isn’t 100% vanilla, but this looks like something else.

Here’s the error when running pum upgrade -p pg_qgep_source -t qgep_sys.pum_info -d delta -u 1.4.0

Upgrade...
     Applying delta 1.3.1 delete_channel_when_no_reach... FEHLER:  zu viele Parameter für RAISE angegeben
CONTEXT:  Kompilierung der PL/pgSQL-Funktion »on_reach_delete« nahe Zeile 20

It looks like a typo :
RAISE NOTICE 'Removing channel (%%) since no reach is left', channel_id;
should be
RAISE NOTICE 'Removing channel (%) since no reach is left', channel_id;

But shouldn’t that have been picked up by CI ?

Postgres version : PostgreSQL 11.4, compiled by Visual C++ build 1914, 64-bit

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

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 ответа

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

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

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

RAISE NOTICE 'El número % % % % %',i,texto1,$1,texto2,result;


1

a_horse_with_no_name
9 Апр 2020 в 22:55

Не относится конкретно к вашему вопросу, но вы можете исследовать 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';

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


0

Belayer
10 Апр 2020 в 01:56

Я застрял с ошибкой слишком много параметров, указанных для RAISE для указанного ниже RAISE. Однако я не нахожу синтаксической проблемы.

  l_task_source_id:= adapter.array_search('prps',g_status.ip_source_tables);
l_check_stmt := ' select max(stufe::numeric) from ' || g_status.source_tables[l_task_source_id] ;
execute l_check_stmt into l_max_hierarchy_level;
raise notice ' Max hierarchy level : %',l_max_hierarchy_level;

Ваш ответ

Введите минимум 50 символов

Студворк — интернет-сервис помощи студентам

Пишу функцию с триггером для таблицы payments. Функция проверяет, что стоимость заказа больше 400.00 и
меняет вводимую сумму на сумму с учетом 10% скидки. Функция почему-то не работает, вроде конструкция и синтаксис
правильные. Выводится сообщение об ошибке:

ОШИБКА: недостаточно параметров для RAISE
КОНТЕКСТ: компиляция функции PL/pgSQL «check_discount» в районе строки 5

Подскажите, пожалуйста, в чем тут проблема.

Oracle 11 SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
-- функция о том, что если заказ на сумму больше 400.00, то
-- клиент получает скидку 10% и идет перерасчет стоимости заказа с учетом этой скидки
CREATE OR REPLACE FUNCTION check_discount() RETURNS TRIGGER AS $check_dis$
  BEGIN
    IF NEW.amount > 400.00 THEN
      NEW.amount = NEW.amount * 0.9;
      RAISE INFO 'Скидка 10%';
    END IF;
    RETURN NEW;
  END;
$check_dis$ LANGUAGE plpgsql;
 
--непосредственное создание триггера с функцией check_discount()
CREATE TRIGGER check_dis
  BEFORE INSERT OR UPDATE ON payments
  FOR EACH ROW EXECUTE PROCEDURE check_discount();
 
 
CREATE TABLE Payments
(check_num VARCHAR(7) NOT NULL,
customer_id INTEGER NOT NULL,
last_name VARCHAR(255) NOT NULL,
payment_date TIMESTAMP,
amount numeric(10,2) NOT NULL);

Понравилась статья? Поделить с друзьями:
  • Eset endpoint antivirus ошибка обновления баз сигнатур
  • Eserverresult eaccessviolation access violation 1с ошибка
  • Esent ошибка 482
  • Esent ошибка 1032
  • Esent ошибка 1023