我一直致力于从SQLITE切换到Interbase数据库。我遇到的一个问题是“bad parameter number”错误。因此,我回到Embarcadero提供的一个示例数据库(EMPLOYEE),尝试各种SQL命令来重现问题。
这是一个场景:我想要一个查询,它给出了对特定客户的所有销售额超过预先指定金额的平均销售额。所以,这里有一个查询,适用于:
SELECT AVG(TOTAL_VALUE) AS AvgSales
FROM SALES
WHERE TOTAL_VALUE > :TOTAL_VALUE
AND CUST_NO = :CUSTNO
现在,我想把这个平均值存储在一个表中。但你怎么能这么做呢?以下是我尝试的:
UPDATE <table>
SET <Column> = (SELECT AVG(TOTAL_VALUE) AS AvgSales
FROM SALES
WHERE TOTAL_VALUE > :TOTAL_VALUE
AND CUST_NO = :CUST_NO)
但是当你尝试执行它时,它会给出错误消息“bad parameter number”
如果你硬编码这两个参数,它工作得很好:
UPDATE <table>
SET <Column> = (SELECT AVG(TOTAL_VALUE) AS AvgSales
FROM SALES
WHERE TOTAL_VALUE > 10000
AND CUST_NO = 1001)
经过更多的实验,在我看来,子查询中的任何参数都将生成相同的错误消息,而不是执行。例如,这也会生成相同的错误消息(并对参数进行硬编码):
SELECT AMT
FROM
(SELECT AVG(TOTAL_VALUE) AS AvgSales
FROM SALES
WHERE TOTAL_VALUE > :TOTAL_VALUE
AND CUST_NO = :CUSTNO
) X(Amt)
那么,如何在Interbase表中存储这样的值呢?
2条答案
按热度按时间qacovj5a1#
使用一个程序可以解决你的问题,该方案:
9wbgstp72#
在SQL服务器中,我们可以通过使用变量来避免这一点: