Sybase - 用户定义的函数

时间:2016-05-05 06:11:56

标签: sql sybase sybase-ase

我有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)有两个我交叉验证的记录。

1 个答案:

答案 0 :(得分:0)

显然,对于UDF(用户定义函数),Sybase编译器将忽略函数的select语句之后的语法。

考虑下面的情况:

选择F1 UNION ALL F2 。 F1和F2是带参数的UDF,突出显示的文本不会在Sybase中编译。 这可能是Sybase的限制。

注意:这不是表格或视图的情况,其中Union all完全正常。