以下是earlier question的未解答的第二部分,作为一个单独的问题:
CREATE OR REPLACE FUNCTION f1 (a1 INTEGER, a2 INTEGER)
RETURNS TABLE (c1 VARCHAR(20), c2 VARCHAR(20), c3 INTEGER, c4 VARCHAR(20), c5 VARCHAR(128))
AS $$
SELECT 'a'::VARCHAR(20), 'b'::VARCHAR(20), 1::INTEGER, 'c'::VARCHAR(20), 'd'::VARCHAR(128);
$$ LANGUAGE SQL;
此示例代码旨在创建一个函数f1
,该函数返回一个包含5行单行的表。
如果我从SELECT
语句中删除了强制转换,我会收到以下错误消息:
最终语句返回未知而不是第1列的字符变化。
但演员阵容真的有必要吗?似乎VARCHAR(20)
已知正确的类型RETURNS
,为什么没有'a'
之类的字符串的隐式转换?有没有更好的方法以简明的方式制定这些东西?