将 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 表中吗

将值插入记录类型表

求一条插入并返回的SQL语句

Postgres 9.6 如何遍历数组并将每个数组值插入表中?

JAVA中用 SQL语句操作小结

Excel表中连接sql并使用sql语句引用excel单元格数据作为查询条件