我有一个查询,它根据2个变量返回一列Zip代码。如何使其返回与存储函数相同的表?我已经创建了一些基于任何变量返回单个结果的结果,但我似乎无法让它返回一个表。
select zone_id
from(Select zone_id, distance, case when distance between 0 and 20 then 1 when distance between 21 and 50 then 2 when distance between 51 and 100 then 3 when distance between 101 and 150 then 4 else 5 end as bucket
From(select zone_id,city,province,terminal_zone, DIST_BETWEEN_ZONES((select postal_code from zone where zone_id = :TERMINAL ),zone_id) as distance
from zone where service_type = 'DIRECT' and zone_id in (select zone_id from terminal_multi where terminal_zone = :TERMINAL))) where bucket = :Bucket
答案 0 :(得分:0)
关键是声明一个光标,打开它并在程序结束时将其保持打开状态。
CREATE PROCEDURE myproc (
IN pTerminal INT
,IN pBucket INT
) LANGUAGE SQL DYNAMIC result sets 1
BEGIN
DECLARE rtn_cur CURSOR WITH RETURN
FOR
SELECT zone_id
FROM (
SELECT zone_id
,distance
,CASE
WHEN distance BETWEEN 0
AND 20
THEN 1
WHEN distance BETWEEN 21
AND 50
THEN 2
WHEN distance BETWEEN 51
AND 100
THEN 3
WHEN distance BETWEEN 101
AND 150
THEN 4
ELSE 5
END AS bucket
FROM (
SELECT zone_id
,city
,province
,terminal_zone
,DIST_BETWEEN_ZONES((
SELECT postal_code
FROM zone
WHERE zone_id = pTerminal
), zone_id) AS distance
FROM zone
WHERE service_type = 'DIRECT'
AND zone_id IN (
SELECT zone_id
FROM terminal_multi
WHERE terminal_zone = pTerminal
)
)
)
WHERE bucket = pBucket;
OPEN rtn_cur;
END