SELECT语句的字段列表中的参数-错误:数据类型未知

时间:2018-07-25 19:49:44

标签: firebird firebird-3.0

我对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.

1 个答案:

答案 0 :(得分:1)

问题在于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

在选择子句中强制转换参数的功能在较旧的Firebird版本中不起作用(我相信它是在Firebird 2.5中引入的,但我不确定100%)。