【发布时间】:2016-02-01 14:39:28
【问题描述】:
我想创建一个输出 CHAR 值的函数。我设法创建了一个 SELECT 语句,它只输出我需要的那个特定值的列和行。但是,当我尝试使用此函数时,我收到一个错误代码,指出输出值无效(SQLCODE=-946-Result set not allowed) 我的函数如下所示:
ALTER FUNCTION "DBA"."findLocation"(@airplane INTEGER)
RETURNS char(3)
BEGIN
SELECT TOP 1 airport FROM flights
WHERE arrivalTime <= now() and airplaneID = @airplane
ORDER BY arrivalTime DESC
END
如您所见,该功能相当简单。我只想输出可以通过获取飞机所在的最后一个机场来确定的飞机位置(现在与到达时间进行比较)。 “航班”表如下所示:
Airport (char(3)) | arrivalTime (timestamp) | airplaneID (integer)
MUC | 2016-01-01 15:00:00.123456 | 1
LAX | 2016-02-10 15:00:00.123456 | 1
STG | 2015-01-01 15:00:00.123456 | 1
MIA | 2016-01-05 15:00:00.123456 | 2
我执行函数:
findLocation(1)
或
SELECT findLocation(1) FROM flights
所需的输出将是 MUC,因为它是截至目前 (2016-02-01) 最后一个机场。洛杉矶国际机场是未来。 STG 在 MUC 之前,MIA 可以忽略,因为它是另一个平面。
解决这个问题的方法可能很简单,但我无法理解它。我还尝试了 SET 命令和 DECLARE。我可能用错了。使用 Sybase SQL Anywhere 12
【问题讨论】:
标签: sql function sybase sqlanywhere