我必须将我的数据库从TSQL移到PostgreSQL,我对postgres很新,我没有找到如何将这个存储过程转换为postgres中的函数
这是我的TSQL存储过程(我尽可能地简化)
具有2列类型(decimal,varchar)的行的预期返回列表
CREATE PROCEDURE dbo.procSelectOpenDocument(
@ItemType_id decimal(38)
)
AS
IF @ItemType_id = 1
BEGIN
SELECT d.ID, d.OrderNumber
FROM dbo.Table1 d
END
IF @ItemType_id = 2
BEGIN
SELECT d.ID, d.OrderNumber2
FROM dbo.Table2 d
END
我的问题?
如果您在TSQL中执行此操作
execute dbo.procSelectOpenDocument(1)
结果
ID | OrderNumber
1 | Some String value
execute dbo.procSelectOpenDocument(2)
结果
ID | OrderNumber2
1 | Some String value
至于您可以看到,列名称列表根据参数而变化。
但这不起作用!!!!
CREATE OR REPLACE FUNCTION dbo.procSelectOpenDocument(IN p_ItemType_id bigint)
RETURNS TABLE
(
ID bigint
,Name varchar(150)
)
LANGUAGE 'plpgsql'
AS $function$
begin
if p_ItemType_id = 1 then
RETURN QUERY SELECT d.ID, d.OrderNumber FROM dbo.Table1 d;
end if;
if p_ItemType_id = 2 then
RETURN QUERY SELECT d.ID, d.OrderNumber2 FROM dbo.Table2 d;
end if;
end
$function$;
答案 0 :(得分:0)
与你不同意第二个查询的列名?
IF @ItemType_id = 2
BEGIN
SELECT d.ID, d.OrderNumber2 as OrderNumber
FROM dbo.Table2 d
END
评论后编辑
IF @ItemType_id = 1
BEGIN
SELECT d.ID, d.OrderNumber, null as OrderNumber2
FROM dbo.Table1 d
END
IF @ItemType_id = 2
BEGIN
SELECT d.ID, null as OrderNumber, d.OrderNumber2
FROM dbo.Table2 d
END