从表中检索数据时占位符

时间:2014-08-14 13:33:39

标签: sql postgresql placeholder

我有一个包含常见主题文本的表,需要在运行时插入一些字符串。例如下面:

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;

我的要求是插入介于其间的某些值并生成最终的电子邮件正文。

1 个答案:

答案 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'会被忽略,因为它未在字符串中引用。

SQL Fiddle.

除此之外:不要使用numeric(10,0)作为ID或主键。 integer or bigint通常会为您提供更好的服务。尽可能使用上面的serial PRIMARY KEY