gpt4 book ai didi

sql - PL/pgSQL 返回 SETOF 记录错误

转载 作者:行者123 更新时间:2023-11-29 14:22:51 27 4
gpt4 key购买 nike

我对 postgresql 比较陌生,正在努力熟悉它。我在编写新的 pl/sql 函数时遇到了错误。 错误:类型“ordered_pa​​rts”不存在

CREATE OR REPLACE FUNCTION get_ordered_parts(var_bill_to integer)
RETURNS SETOF ordered_parts AS
$BODY$
declare

var_ordered_id record;
var_part ordered_parts;

begin

for var_ordered in select order_id from view_orders where bill_to = var_bill_to
loop

for var_part select os.po_num,os.received,os.customer_note,orders.part_num,orders.description,orders.order_id,orders.remaining_quantity from (select vli.part_num,vli.description,vli.order_id,vli.quantity - vli.quantity_shipped as remaining_quantity from view_line_items as vli where vli.order_id in (select order_id from view_orders where bill_to = var_bill_to and order_id = var_ordered.order_id) and vli.quantity - vli.quantity_shipped > 0)as orders left join order_sales as os on orders.order_id = os.order_id
then

-- Then we've found a leaf part
return next var_part;

end if;

end loop;

end;
$BODY$
LANGUAGE 'plpgsql' VOLATILE
COST 100
ROWS 1000;
ALTER FUNCTION get_ordered_parts(integer) OWNER TO postgres;

最佳答案

请注意 - 您的代码是如何永远不编写存储过程的完美示例。对于一些较长的结果,它可能会非常慢。至少两个循环可以合并为一个循环,或者更好的是,您可以只使用一个 RETURN QUERY 语句。下一个问题是嵌入式 SQL 的零格式化 - 行的长度最好在 70 到 100 个字符之间 - 将长 SQL 语句写入一行,代码的可读性和可维护性为零。

关系数据库不是数组,任何查询都有一定的开销,所以如果实在不需要就不要使用嵌套FOR。我很抱歉离题了。

关于sql - PL/pgSQL 返回 SETOF 记录错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16820433/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com