“date $1”参数化查询中的 PostgreSQL 语法错误

2024-05-04

尝试参数化我的 SQL 查询(使用 libpq 函数PQexec参数 http://www.postgresql.org/docs/current/static/libpq-exec.html),我陷入了语法错误:

SELECT date $1

错误是:

ERROR:  syntax error at or near "$1"

准备好的报表 http://www.postgresql.org/docs/current/interactive/sql-prepare.html

对此的解释可以找到在本章中其他类型的常量手册的 http://www.postgresql.org/docs/current/interactive/sql-syntax-lexical.html#SQL-SYNTAX-CONSTANTS-GENERIC:

The ::, CAST(),并且函数调用语法也可用于指定 任意表达式的运行时类型转换,如中讨论的第 4.2.9 节 http://www.postgresql.org/docs/current/interactive/sql-expressions.html#SQL-SYNTAX-TYPE-CASTS. 为了避免语法歧义,type 'string'句法 只能用于指定简单文字常量的类型。类型的另一个限制'string' syntax是它不 适用于数组类型;使用:: or CAST()指定数组的类型 持续的。

大胆强调我的。

准备好的语句的参数实际上并不是刺字文字但输入了values,所以你不能使用这种形式type 'string'。使用其他两种形式之一将值转换为不同的类型,就像您已经发现的那样。

Example:

PREPARE foo AS SELECT $1::date;

EXECUTE foo('2005-1-1');

类似的PQexecParams在 libpq C 库中 http://www.postgresql.org/docs/current/static/libpq-exec.html

文档:

...在 SQL 命令文本中,将显式强制转换附加到参数 符号显示您将发送的数据类型。例如:

SELECT * FROM mytable WHERE x = $1::bigint;

这个力参数$1被视为bigint,而默认情况下 它会被分配与 x 相同的类型。强制参数类型 通过这种方式或通过指定数字类型 OID 的决定是 强力推荐。 ...

The 选择正如上面引用中提到的,是将各个数据类型的 OID 传递给paramTypes[]- 如果你真的需要演员阵容。在大多数情况下,让 Postgres 从查询上下文中派生数据类型应该可以正常工作。

paramTypes[]

通过 OID 指定要分配给参数的数据类型 符号。如果paramTypes is NULL,或数组中的任何特定元素 为零,服务器推断参数符号的数据类型 与处理非类型文字字符串的方式相同。

可以从系统目录中获取数据类型的OIDpg_type http://www.postgresql.org/docs/current/interactive/catalog-pg-type.html:

SELECT oid FROM pg_type WHERE typname = 'date';

您必须使用正确的内部类型名称。例如:int4 for integer.
或者方便地转换为regtype http://www.postgresql.org/docs/current/interactive/datatype-oid.html#DATATYPE-OID-TABLE:

SELECT 'date'::regtype::oid;

这更加灵活,因为类型名称的已知别名也被接受。例如:int4, int or integer for integer.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“date $1”参数化查询中的 PostgreSQL 语法错误 的相关文章

随机推荐

  • 如何使用 Objective-C 在 Mac Os X 中模拟 Unicode Char“按键”?

    我想在 Mac OS X 中模拟 unicode 字符发送到前台应用程序 我的意思是我有一个像 a 这样的unicode char 可以包含阿拉伯语 中文等 我想输入它 请注意 我并不是尝试使用虚拟按键或按键代码 只有一个角色 您忠诚的 佩
  • 悬停时连续 CSS 旋转动画,悬停时动画回到 0deg

    我有一个元素 当你将鼠标悬停在它上面时 它会无限旋转 当您将鼠标悬停在外面时 动画就会停止 简单的 webkit keyframes rotate from webkit transform rotate 0deg to webkit tr
  • 在 ios 7 设备上获取多个应用程序图标

    我在 ios7 iPhone5 设备 上遇到一个奇怪的错误 我在ios7上使用xcode5安装了iPhone应用程序我的问题是每当我在设备上安装应用程序时 我都会收到多个应用程序图标 多次使用相同的名称 我还尝试通过我的系统使用不同的应用程
  • FacebookCallback#onCancel() 在 Android 的 Facebook Sdk 4.2.0 中登录一次后调用

    我已经在 Android 应用程序中成功实现了 Facebook 登录 但现在 令人惊讶的是 当我使用 facebook 登录时 如果我尝试使用 facebook 库 4 2 0 登录 facebook 它的 onCancel 方法就会被调
  • 如何使用 pandas groupby 函数根据 groupby 值应用公式

    我的问题可能有点令人困惑 所以让我解释一下 我有一个信息数据框 我想按唯一订单 ID 对其进行分组 该 ID 将生成以下列 sum qty 每个订单 ID 执行的总金额 csv 这是每个订单 ID 的 csv 列的总和除以订单 ID 的已执
  • 使用 JavaScript 检测硬重新加载

    为了澄清 I am not试图区分刷新和重新加载 因此这不是重复的刷新与重新加载 https stackoverflow com questions 5004978 check if page gets reloaded or refres
  • codeigniter core/model.php 未定义属性

    我从未接触过 model php 文件 但是我收到了此错误 Jobprocess 是我的控制器 lastname是在其中正确分配的变量 我不知道为什么会出现这个错误 这是使用 codeigniter 框架 Message Undefined
  • pyspark:计算窗口上的不同值

    我刚刚尝试做一个countDistinct越过一个窗口并得到这个错误 AnalysisException 不支持不同的窗口函数 计数 不同颜色 1926 有没有办法在 pyspark 的窗口上进行不同的计数 这是一些示例代码 from py
  • 在同一台服务器上运行两个 PHP 版本

    我在本地服务器上有两个项目 一个项目运行PHP5 6 另一个项目运行PHP7 0 现在可以根据项目启用这两个版本吗 我已经尝试添加AddHandler application x httpd php7 php在 htaccess 项目之一中
  • 我从 clojure 和 python 中得到的 hmac 签名略有不同

    我从 python 实现和 clojure 实现中获得的 HMAC SHA1 签名略有不同 我很困惑什么会导致这种情况 Python实现 import hashlib import hmac print hmac new my key my
  • org.json.JSONArray 类型的值无法转换为 JSONObject

    陷入了这个错误 3169 3190 com meisolsson app E JSON 解析器 解析数据时出错 org json JSONException Value type 0 can see custom stories true
  • 这叫什么类型的建筑?

    对于我当前正在开发的 Web 应用程序 ASP NET MVC 我们采用以下架构 Data Access Layer 将数据持久保存到任意数据库的逻辑 Domain 数据模型 Service Layer 业务逻辑 例如订单处理 账户管理等
  • 在 Codeigniter 中添加表前缀以加入

    我设置了 Codeigniter 将前缀 kms 添加到我的活动记录查询中 但是 我尝试使用两个 ON 条件进行连接 但它不会将它们放在前面 现在我必须像这样手动添加它们 this gt db gt join site items kms
  • 改造:无法为类创建 @Body 转换器

    我需要通过改造 2 发送下一个 json Inspection UUID name ModifiedTime 2016 03 09T01 13 CreatedTime 2016 03 09T01 13 ReviewedWith name2
  • getView() 和 getActivity() 有什么区别?

    有什么区别getView and getActivity 我已经使用了这两种方法 但不明白基本的区别 即使使用方法在android中也是相同的 ListView deliverItemList ListView getView findVi
  • hadoop2.2.0追加文件发生AlreadyBeingCreatedException

    我遇到了一个关于hadoop2 2 0追加操作的问题 我通过 HDFS java API 将一些字节附加到 hdfs 文件 首先 如果在附加操作之前文件不存在 我将创建目标文件 代码如下 String fileUri hdfs hadoop
  • 使用 net/http 发送 Post 请求

    我需要将 JSON 数据发送到同一台计算机上运行的另一个应用程序 我像这样发送请求 rails 3 2 13 data some data hash url URI parse http localhost 6379 api plans r
  • Firebase 如何更新多个子项?

    我有很多这样的孩子的父母 Parent childe1 data childe2 data childe3 data childe4 data childe5 data 我怎样才能更新孩子们的信息 childe1 childe2 child
  • 使用箭头键滚动可滚动控件

    我正在使用一个ScrollableControl在我的 C 项目中 我想知道如何将箭头键映射到垂直 水平滚动 编辑 我的图片框获得焦点 并且我设法映射滚动键 这里的问题是 当我按下箭头键时 它会滚动一次 然后失去焦点 将其交给滚动查看器旁边
  • “date $1”参数化查询中的 PostgreSQL 语法错误

    尝试参数化我的 SQL 查询 使用 libpq 函数PQexec参数 http www postgresql org docs current static libpq exec html 我陷入了语法错误 SELECT date 1 错误