我有2个用户定义的函数返回一个表: 让我们说UDF1和UDF2
select * from UDF1(param1)
- >返回1结果
select * from UDF2(param2)
- >返回1结果
问题出在我做的时候
select * from UDF1(param1) union all select * from UDF2(param2)
- 只返回1个结果。
理想情况下,它应该返回2个结果,因为它是一个联合全部。
有人可以帮助我在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)有两个我交叉验证的记录。
答案 0 :(得分:0)
显然,对于UDF(用户定义函数),Sybase编译器将忽略函数的select语句之后的语法。
考虑下面的情况:
选择F1 UNION ALL F2 。 F1和F2是带参数的UDF,突出显示的文本不会在Sybase中编译。 这可能是Sybase的限制。
注意:这不是表格或视图的情况,其中Union all完全正常。