PostgreSQL:错误:为raise指定了太多参数

时间:2016-01-13 11:19:48

标签: postgresql

我正在尝试运行我的存储过程脚本。其中有21个脚本成功执行了18个,但其中3个没有执行。其中一个失败的脚本如下(我正在使用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;

我收到错误声明

" 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

3 个答案:

答案 0 :(得分:2)

Raise Notice只需要两个参数

你想要的是:

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

Errors and Messages

答案 1 :(得分:1)

这里的问题是连续两个%被视为一个%。据医生说:

  

编写%%以发出文字%。

这意味着%%%通常是%加一个参数,这就是发生此错误的原因。您可以将%%%与空格分开,或者传递一个参数并进行参数连接。

答案 2 :(得分:0)

是的,我通过擦除1%来解决

“这里的问题是连续两个%被视为一个%”

祝你有美好的一天!

Hiram