我有以下工作DB2 SQL函数
CREATE OR REPLACE FUNCTION selector (param VARCHAR(3))
RETURNS TABLE (id INT, CMD VARCHAR(1024), ATTR CHAR(10))
LANGUAGE SQL
DETERMINISTIC
NO EXTERNAL ACTION
RETURN
SELECT id, cmd, attr
FROM test.commandtbl c
WHERE c.attr=param;
称之为:
select * from table (selector('c'))!
问题是我希望返回表的大小和类型是动态的。 我想使用带有大量返回字段的函数,并且在测试时我不想总是检查返回表,它仍然匹配。
例如:
Test1有5个返回列:INT,INT,INT,CHAR(10),VARCHAR(100)
Test2有20个返回列:10 VARCHAR(100)和10 INT
等等。
有办法吗?
答案 0 :(得分:0)
您可以将SQL视为静态类型语言,因为它几乎没有能力在运行时发现其变量(例如列)和对象(例如结果集)数据类型;你必须在语句编译时声明类型。换句话说,你想要实现的目标是不可能的。
有一个generic table function的概念,它允许您定义一个返回某些结果集的基于Java的UDF:
CREATE FUNCTION selector (param VARCHAR(3))
RETURNS GENERIC TABLE
EXTERNAL NAME...
但是,您仍需要在接收端声明结果集结构:
SELECT t.* FROM TABLE (selector('c')) AS t (foo INT, bar INT, baz VARCHAR(10)...)