将 SQL 语句作为记录值插入 PostgreSQL 列
Posted
技术标签:
【中文标题】将 SQL 语句作为记录值插入 PostgreSQL 列【英文标题】:Inserting a SQL statement as a record value into a PostgreSQL column 【发布时间】:2019-09-11 23:11:39 【问题描述】:我使用一个使用 PostgreSQL 10.7 的应用程序。该应用程序的一部分允许您将一组数据库对象和 SQL 语句捆绑到一个包中,您可以稍后在创建开发环境时运行该包。
每个对象和 SQL 语句在数据库中都有自己的记录。我必须创建超过 1000 条记录,因此我正在尝试创建一个脚本,它将为我将 SQL 语句插入到数据库中。
我创建了我的脚本,但是一旦 Postgres 看到第二个“值”命令,该命令是我尝试插入的记录的一部分,我就会收到错误消息。
这是我正在尝试做的一个示例:
````insert into MY_TABLE
( NAME,
SQL_STMT,
ADDED_BY,
DATE_ADDED )
values
( 'package_1',
'INSERT INTO TABLE_1(NAME, OBJECT_ID, ORDER_NUMBER) VALUES
'LCMSMS','PEST',1);'
'CJONES',
'9/11/2019' );````
我期待它被插入,但我收到以下错误。谁能指导我如何“插入我的插入语句”?
LINE 8: ...NAME,SQL_STMT,ADDED_BY,DATE_ADDED) VALUES ('LCMSMS...````
【问题讨论】:
我打算手动进行。我不熟悉客户端库,但这是我可以研究的一个选项。谢谢。 【参考方案1】:您的 SQL 语句包含嵌入的引号,与周围的引号发生冲突。您需要将这些引号加倍,例如:
````insert into MY_TABLE
( NAME,
SQL_STMT,
ADDED_BY,
DATE_ADDED )
values
( 'package_1',
'INSERT INTO TABLE_1(NAME, OBJECT_ID, ORDER_NUMBER) VALUES (''LCMSMS'', ''PEST'', 1);'
'CJONES',
'9/11/2019' );````
正如mu is too short 所评论的,另一种解决方案是使用Postgres dollar quoting syntax。这样可以省去对每个嵌入的引用进行双引号的工作:
````insert into MY_TABLE
( NAME,
SQL_STMT,
ADDED_BY,
DATE_ADDED )
values
( 'package_1',
$$INSERT INTO TABLE_1(NAME, OBJECT_ID, ORDER_NUMBER) VALUES ('LCMSMS', 'PEST', 1);$$
'CJONES',
'9/11/2019' );````
【讨论】:
美元报价将是另一种选择,因为我们正在谈论 PostgreSQL。 @muistooshort:我用这个 Postgres 特定的解决方案更新了我的答案。感谢您的改进建议! 我尝试了这两种解决方案,它们都工作得很好。谢谢你们两位的快速回复。非常感谢!以上是关于将 SQL 语句作为记录值插入 PostgreSQL 列的主要内容,如果未能解决你的问题,请参考以下文章
我可以使用 Apache Commons DBUtils 将记录插入到将 bean 作为值传递的 SQL 表中吗