我有一个包含常见主题文本的表,需要在运行时插入一些字符串。例如下面:
CREATE TABLE certification.cert_email_dtls (
cert_eid_id numeric(10,0),
cert_eid_email_body character varying(8000),
);
insert into certification.cert_email_dtls(1,'hello world <blank-value1>);
insert into certification.cert_email_dtls(2,'hello guys <blank-other-value2>);
insert into certification.cert_email_dtls(3,'hello <blank-value3> india <some-other-value4>);
等等。 <some-value>
,<some-other-value>
等在运行时出现。
SELECT cert_eid_id ,
cert_eid_email_body,
INTO v_id,
v_email_body_end
FROM certification.cert_email_dtls where cert_eid_id = in_id;
我的要求是插入介于其间的某些值并生成最终的电子邮件正文。
答案 0 :(得分:0)
format()
可能是完美的工具。阅读手册中的详细信息。
如果您可以使用兼容格式保存cert_eid_email_body
,例如:
CREATE TABLE cert_email_dtls (
cert_eid_id serial PRIMARY KEY
, cert_eid_email_body text
);
INSERT INTO cert_email_dtls (cert_eid_email_body)
VALUES ('hello %1$s india %2$s');
整个操作可以简单:
SELECT format(cert_eid_email_body, 'foo', 'bar', 'baz') AS cert_eid_email_body
FROM cert_email_dtls
WHERE cert_eid_id = 1;
结果:
cert_eid_email_body
-------------------
hello foo india bar
请注意,第三个参数'baz'
会被忽略,因为它未在字符串中引用。
除此之外:不要使用numeric(10,0)
作为ID或主键。 integer
or bigint
通常会为您提供更好的服务。尽可能使用上面的serial PRIMARY KEY
。