【发布时间】:2015-10-14 23:50:36
【问题描述】:
这是我的代码,当我加入其他表时,我有动态列名,数据类型不匹配会发生。我该如何解决这个问题..
CREATE OR REPLACE FUNCTION migratePartnerAdvertiser() RETURNS int4 AS '
DECLARE r RECORD;
BEGIN
FOR r IN
select distinct COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME = ''casesheetcomplaints'' and table_schema=''public''
LOOP
EXECUTE concat(''INSERT INTO patient_form_value(patient_form_id,
form_template_field_id, field_value)
select pf.id AS patient_form_id, ftf.id AS form_template_field_id, c.'',
r.column_name, '' AS field_value
FROM casesheetcomplaints c
LEFT OUTER JOIN form_field ff ON ff.field_name = '',r.column_name,''
LEFT OUTER JOIN form_template_field ftf ON ftf.form_field_id = ff.id
LEFT OUTER JOIN patient_form pf on c.patient_id = pf.patient_id
AND pf.created_date = c.reg_date
where c.'', r.column_name, '' IS NOT NULL AND ftf.id IS NOT NULL
GROUP BY c.patient_id, c.'', r.column_name, '', pf.id, ftf.id'');
END LOOP;
return 1;
END;
' LANGUAGE plpgsql;
错误信息:
错误:运算符不存在:字符变化 = 数字第 4 行: 左外连接 form_field ff ON ff.field_name = weight ^ 提示:没有运算符匹配给定的名称和参数类型。你可能需要 添加显式类型转换。查询:插入 患者表格值(患者表格 ID,表格模板字段 ID, field_value) 选择 pf.id AS Patient_form_id, ftf.id AS form_template_field_id, c.weight AS field_value FROM casesheetcomplaints c LEFT OUTER JOIN form_field ff ON ff.field_name = weight 左外连接 form_template_field ftf ON ftf.form_field_id = ff.id 左外连接 patient_form pf on c.patient_id = pf.patient_id AND pf.created_date = c.reg_date 其中 c.weight 是 NOT NULL AND ftf.id IS NOT NULL GROUP BY c.patient_id, c.weight,pf.id,ftf.id
【问题讨论】:
-
为了减少引用问题,您可以使用
format()函数代替 concat() 构造(否则您可以使用 quote_ident() 和 quote_literal() )
标签: postgresql