暂无图片
oracle存储过程转PG,record兼容问题
我来答
分享
一一
2021-08-20
oracle存储过程转PG,record兼容问题

oracle部分存储过程代码

type dev_record is record(
id varchar2(32),
name varchar2(64));
type t_dev_type is table of dev_record index by binary_integer;
v_temp_type t_dev_type;
v_temp_record_type t_dev_type;
begin
if xxx then
select ‘1’,‘aaa’ into v_temp_record_type from dual;
v_temp_type(v_temp_type.count+1):=v_temp_record_type;
end if;
if yyy then
select ‘2’,‘bbb’ into v_temp_record_type from dual;
v_temp_type(v_temp_type.count+1):=v_temp_record_type;
end if;
for i in 1 … _temp_type.count loop
update tabname set col=‘xxx’ where id=v_temp_type(i).id;

end loop;
end;

转换为pg函数时有两个问题
1.PG的record如何追加?
2.多行记录的record如何一行一行取出来用?

我来答
添加附件
收藏
分享
问题补充
3条回答
默认
最新
海潮

pg function 可以这样写:

CREATE OR REPLACE FUNCTION fun( parm CHARACTER VARYING)
    RETURNS SETOF RECORD AS
$BODY$

DECLARE
  i_rec  RECORD;
BEGIN
  FOR i_rec IN (select xxxx from t1) LOOP
     RETURN NEXT i_rec;
  END LOOP;
  RETURN;
END;

$BODY$;

复制

BTW,这个问题描述及例子代码写的让人不想看

暂无图片 评论
暂无图片 有用 1
打赏 0
暂无图片
墨天轮福利君
升级问题到: 紧急故障
暂无图片 评论
暂无图片 有用 0
打赏 0
彭冲

1.PG的record如何追加?
回复:PG里record类型可以直接使用,不需要定义type。record类型如果要返回一个集合,函数的返回值使用returns setof record,结构体里return next record。

2.多行记录的record如何一行一行取出来用?
回复:使用for循环遍历处理。

详细使用请参考plpgsql服务器编程http://postgres.cn/docs/12/plpgsql.html

暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
pg中SQL没有过滤条件,在创建索引的时候,还要加个常量吗?
回答 1
我实际测试了MySQL是不需要Oracle这样添加常量也能走索引的。PG可以自己走测试
Oracle数据库备份,一般备份什么格式?
回答 1
已采纳
看你用哪种方式,expdp方式是dmp后缀,rman一般是bkp
pg 中 table的owner 可以是多个用户吗?
回答 1
已采纳
不能,一对一关系
Oracle 19c 安装报错
回答 13
更换正统的centos系列,国产系列有很多软件包版本被更新了
Oracle 触发器没有生效是写错了吗?
回答 1
beforeinsertorupdate改为afterinsertorupdate
pg中索引损坏(有坏块),表还能否正常使用?
回答 4
可以正常使用但是可能会走全表扫影响效率rebuildindex锁表,DML和select都会被锁rebuildindexconcurrentlypostgresl12才的功能createindexco
oracle 中调整字段精度有哪些方法?
回答 1
已采纳
✅oracle调整字段精度的四种方法:调整方式一:(精度只能调大不能调小)altertabletablenameaMODIFY(columnAXXnumber(27,15));调整方式二:(借用一个新
AWR分析报告问题求助:帮忙出一下优化思路
回答 3
GC等待锁等待从sql看也是2个DML消耗最长,建议同一个应用只连RAC的其中一个节点
请教一下,跨版本expdp可以吗?11201要升到19,中间要升好几次。
回答 3
一次搞定,如果高到低需要指定version,如果RAC环境注意clustern;如果12c以上,目标库最好是非归档或者TRANSFORMDISABLEARCHIVELOGGING:YTRANSFORM
postgresql数据库报错:postgresql 9.5 server启动后停止
回答 1
已采纳
这个要具体看日志了。PG另外推荐在linux上源码安装,因为rpm安装都少功能。不建议windows。还有pg都14了,哪怕用13,也别用9了。