加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

PostgreSQL 存储过程 笔记

发布时间:2020-12-13 17:12:50 所属栏目:百科 来源:网络整理
导读:?PG中存储过程和函数不分,统一是Function 返回值必须和出参类型一致 参数名要避开列名,例如用p_做前缀 运行中输出可以使用RAISE NOTICE ‘模板’,变量1,变量2...; 4.1 变量会依次替换模板中的’%’,要以分号结尾,且%占位符的数量要和变量的数量完全一致
  1. ?PG中存储过程和函数不分,统一是Function

  2. 返回值必须和出参类型一致

  3. 参数名要避开列名,例如用p_做前缀

  4. 运行中输出可以使用RAISE NOTICE ‘模板’,变量1,变量2...;

4.1 变量会依次替换模板中的’%’,要以分号结尾,且%占位符的数量要和变量的数量完全一致。输出的结果在下方输出窗口的消息中显示

4.2 RAISE是一个函数,NOTICE指的是级别,同样可以换成DEBUG,LOG,INFO,EXCEPTION且函数和级别大小写不敏感。具体某个级别是否输出取决于系统设定,默认情况下输出NOTICE,INFO,EXCEPTION这3个级别。

5. 游标的使用

5.1 定义游标:在DECLARE 和BEGIN中间,以c refcursor的方式来定义。

5.2 打开游标:open c for select xxx from xxx where ...

5.3 获取数据:fetch c into xxx

into 后面可以跟变量名,根据select出来的列来存入,也可以定义一个RECORD类型的变量,直接放 进去,取的时候,直接用[RECORD变量名].[列名]获取对应列的数据。

5.4 循环获取数据,首先fetch一次,然后利用内置变量found循环获取数据

DECLARE
crefcursor;
rRECORD;
BEGIN
opencforselect*fromt_test;
fetchcintor;
WHILEfoundLOOP
RAISENOTICE‘data:%,%,%’,r.column_1,r.column_2,r.column_3;
fetchcintor;--这里一定要再次fetch一下
ENDLOOP;
END;

5.变量名要避开参数名以及列名,例如以v_做前缀

6.待续

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读