2016-01-13 11 views
0

Я пытаюсь запустить мои скрипты хранимой процедуры. Есть 21 сценарий, среди которых 18 успешно выполнены, но 3 из них не исполняются. Один из сценария, который неудовлетворительный дается ниже (я использую PostgreSQL 9.5)PostgresSQL: Ошибка: слишком много параметров указано для повышения

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; 

я получаю ошибку о том, что

" 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

ответ

1

Raise Notice принимает только два параметра

То, что вы хотите, вероятно, является:

RAISE NOTICE '%%%', SQLSTATE || ' - ' || SQLERRM; 

Errors and Messages

+0

thanks..it работал –

+0

@mohammadshahbazKhan Если вы мало, что это правильно, не забудьте принять его. Его значок V слева. –

1

Проблема здесь в том, что два последовательных% считаются как один%. Согласно документу:

Напишите %%, чтобы испустить букву%.

Это означает, что %%% обычно% плюс один аргумент, и именно поэтому эта ошибка возникла. Вы можете отделить %%% с пробелом или передать один аргумент и сделать конкатенацию аргументов.