firebird - SELECT 语句的字段列表中的参数 - 错误:数据类型未知
问题描述
我对 Firebird(嵌入式)数据库有疑问。我想在 select 语句中设置一个参数值。例如:
SELECT name, surname, :string AS myText
FROM myTable
其中:string
是一个参数。上面的代码在 SQLite 中工作,结果是(当参数是“abcdef”时):
+------+---------+---------+
|name |surname |myText |
+------+---------+---------+
|John |Black |abcdef |
+------+---------+---------+
|Thomas|Young |abcdef |
+------+---------+---------+
|... |... |abcdef |
+------+---------+---------+
|nameX |surnameY |abcdef |
+------+---------+---------+
当我尝试执行此查询时,我收到以下消息:“在 SQL 语句的应用程序输入参数中发现错误。
Dynamic SQL Error.
SQL error code = -804.
Data type unknown.
解决方案
问题是 Firebird 需要知道参数的数据类型。SQLite 中的 IIRC,一切都是字符串,但在 Firebird 中并非如此。
您将需要显式转换参数以告知 Firebird 预期的类型,例如:
SELECT name, surname, cast(? as varchar(100)) AS myText
FROM myTable
其中?
是位置参数。Firebird 没有命名参数(过程中除外),但如果您的访问库模拟命名参数,那么以下可能也可以工作:
SELECT name, surname, cast(:string as varchar(100)) AS myText
FROM myTable
在 select 子句中转换参数的能力在旧版 Firebird 中不起作用(我相信它是在 Firebird 2.5 中引入的,但我不是 100% 确定)。
推荐阅读
- php - 在php中找到对象的边缘后,如何仅从图像中裁剪对象?
- c++ - 模板参数列表中的解析错误,预期标识符
- elasticsearch - 使用 Elasticsearch 根据优先级获取相关搜索结果
- c++ - 非 void 函数缺少 return 语句的返回值是多少?
- python - 将python字典转换为python中的字典字典
- .net - 我们是否可以在水晶报表中创建用户定义的函数,该函数可以在所有报表中访问或使用,例如内置函数的水晶报表?
- php - 从 FTP 服务器下载所有内容,没有时间限制
- eclipse-plugin - 在插件无头模式下修改 AST
- javascript - Puppeteer 评估函数
- node.js - 护照身份验证不在端点之间持续存在