Sybase-用户定义函数



我有两个用户定义的函数,它们返回一个表:比如说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工作得非常好的表或视图,情况并非如此。

最新更新