我有两个用户定义的函数,它们返回一个表:比如说UDF1和UDF2
select * from UDF1(param1)
->返回1个结果
select * from UDF2(param2)
->返回1个结果
问题是当我做时
select * from UDF1(param1) union all select * from UDF2(param2)
-只返回1个结果。
理想情况下,它应该返回2个结果作为其并集all。
有人能帮助我为什么在sybase中观察到这种行为吗?
具体代码如下:创建的函数如下:
EXEC SQL.
CREATE FUNCTION "ZCHECK_4" (
@COL3_VAL smallint
)
RETURNS TABLE (
"COL1" varchar(000030),
"COL2" varchar(000030),
"COL3" smallint
) AS RETURN SELECT
"ZTESTFUNC"."COL1",
"ZTESTFUNC"."COL2",
"ZTESTFUNC"."COL3"
FROM "ZTESTFUNC" "ZTESTFUNC"
WHERE "ZTESTFUNC"."COL3" = @COL3_VAL
ENDEXEC.
最终Sql视图->只返回1行
CREATE VIEW "ZCHECK_5" AS SELECT
"ZCHECK_4"."COL1",
"ZCHECK_4"."COL2",
"ZCHECK_4"."COL3"
FROM "ZCHECK_4"(
CAST(
20 AS TINYINT
)
) "ZCHECK_4"
UNION ALL SELECT
"ZCHECK_4"."COL1",
"ZCHECK_4"."COL2",
"ZCHECK_4"."COL3"
FROM "ZCHECK_4"(
CAST(
10 AS TINYINT
)
) "ZCHECK_4"
注意:基础表(ZTESTFUNC)有2条记录,我对它们进行了交叉验证。
显然,对于UDF(用户定义函数),Sybase编译器会忽略函数的select语句后的语法。
考虑以下sceanrio:
选择F1UNION ALL F2。F1和F2是带有参数的UDF,突出显示的文本不会在Sybase中编译。这可能是Sybase的限制。
注意:对于Union工作得非常好的表或视图,情况并非如此。