PostgreSQL:如何返回我的自定义复合类型[关闭]

qgelzfjb  于 2023-06-05  发布在  PostgreSQL
关注(0)|答案(1)|浏览(138)

**已关闭。**此问题为not reproducible or was caused by typos。目前不接受答复。

此问题是由打印错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
5天前关闭。
Improve this question
这是我的定制类型。

CREATE TYPE salary_info AS (
    max_salary numeric,
    min_salary numeric
);
CREATE FUNCTION test_1(city varchar(15)) RETURNS salary_info AS $$
    SELECT 
        MAX(salary) AS min_salary,
        MIN(salary) AS max_salary
    FROM employees
        WHERE city = test_1.city;  
$$ LANGUAGE SQL;

SELECT test_1('New York');
我得到了这个结果:enter image description here
但这个示例可以工作:

CREATE FUNCTION test_4(city varchar(15)) RETURNS salary_info AS $$
    SELECT 1.0, 2.0
$$ LANGUAGE SQL;

SELECT test_4('New York');

输出(1.0、2.0)
会有什么问题呢?

yqlxgs2m

yqlxgs2m1#

尽管不是问题的原因,但始终完全限定函数中使用的查询中的标识符,以防止潜在的名称冲突;例如:

CREATE FUNCTION test_1(city varchar(15)) RETURNS salary_info AS $$
    SELECT
        MAX(employees.salary) AS min_salary,
        MIN(employees.salary) AS max_salary
    FROM employees
        WHERE employees.city = test_1.city;
$$ LANGUAGE SQL;

即使创建的函数的参数名与查询表中的列名不同,也不能保证将来不会有人无意中(或恶意地)创建冲突的列。

相关问题