免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4075 | 回复: 3
打印 上一主题 下一主题

postgresql 存储过程 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-06-14 12:32 |只看该作者 |倒序浏览
不知道有没有人对postgresql 存储过程比较了解的?老大让我写一个Linux环境下的基本postgresql的存储过程,但这个东东到底如何使用,该如何写嘞,没一点头绪,郁闷!!!!!

论坛徽章:
7
数据库技术版块每日发帖之星
日期:2015-08-08 06:20:00数据库技术版块每日发帖之星
日期:2015-08-29 06:20:00数据库技术版块每日发帖之星
日期:2015-08-29 06:20:00数据库技术版块每日发帖之星
日期:2015-09-18 06:20:00数据库技术版块每周发帖之星
日期:2015-11-06 19:56:51数据库技术版块每日发帖之星
日期:2016-01-22 06:20:00数据库技术版块每日发帖之星
日期:2016-02-05 06:20:00
2 [报告]
发表于 2012-06-21 09:10 |只看该作者
联机帮助不有现成的例子吗

论坛徽章:
0
3 [报告]
发表于 2012-06-21 10:11 |只看该作者
主要是sqlserver到PG的手动移植,不知道存储过程中两个或两个以上的查询语句该怎么返回查询结果,不想用创建临时表的方法,有没有其他的方法?

论坛徽章:
0
4 [报告]
发表于 2012-06-21 10:14 |只看该作者
例如sqlserver原码如下:
CREATE PROCEDURE proQueryAD
(  
     @UserID          INT
)  
WITH ENCRYPTION  
AS  
BEGIN  
    DECLARE @ver int , @ADID int  
        select @ver=0
    SELECT @ver=A.Ver,@ADID=A.ID from CfgAD A,CfgArea B,CfgUser C
    where C.ID=@UserID and C.AreaID=B.ID and A.AreaID=B.ID
       
        if exists (select * from  ADInfo where ADID=@ADID)
        begin
           select @ver as 'Ver' ,Url, LinkUrl from ADInfo where ADID=@ADID
        end
        else
        begin
            SELECT @Ver as 'Ver' ,'' as 'Url' ,'' as 'LinkUrl'
        end
   
END
GO
GRANT EXECUTE ON proQueryAD TO PUBLIC

我转换的PG如下:
CREATE OR REPLACE FUNCTION proQueryAD(U_UserID INTEGER) RETURNS SETOF RECORD AS
$$
DECLARE
    v_Ver   INTEGER;
    v_ADID  INTEGER;
    v_rec RECORD;
BEGIN
   v_Ver  := 0;
   v_ADID := 0;

   FOR v_rec IN SELECT A.Ver, A.ID from CfgAD A,CfgArea B,CfgUser C
    where C.ID=U_UserID and C.AreaID=B.ID and A.AreaID=B.ID LOOP   
        v_Ver=v_rec.Ver;
        v_ADID=v_rec.ID;
        RETURN NEXT v_rec;
   END LOOP;

   BEGIN
        IF EXISTS(select * from  ADInfo where ADID=v_ADID) THEN
                BEGIN
                        select v_Ver as Ver ,Url, LinkUrl from ADInfo where ADID=V_ADID;
                END;
        ELSE
                BEGIN
                        SELECT v_Ver as Ve ,'' as Url ,'' as LinkUrl;
                END;       
        END IF;
   END;       
   
   RETURN;
END;
$$
LANGUAGE PLPGSQL;

这个里面我想返回的是三个字段或三个空,怎么写返回值及查询语句?我那个返回值我只是临时测试用的!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP