记录oracle转pgsql的语法转换
oracle转pgsql:
todate 会省略时分秒 需要时分秒使用to timestamp
取json中的数据 使用 ->> 或者 ->
->>取回来的是text类型,->取回来的是json类型
coalesce 代替nvl2
json中取出的数据不能直接和其他字段比较,需要显示的转换类型 ::varchar
代码块需要在开头增加 do $$, 末尾增加 $$
pgsql中没有varchar2、clob、number,改为varchar,json、numeric
pgsql中的函数 如果使用的是json里取得数据,也需要显式转换类型
pgsql中没有nvl2函数,有nvl函数或者coalesce。使用nvl函数,也需要显式转换类型 select nvl(null,'无'::text) from dual
pgsql to_char函数 时间如果是json中的时间需要定义类型 select to_char(('2020-10-25 ')::timestamp, 'yyyy-MM-dd') from dual
pgsql 游标的使用与 oracle不同
游标名称 - cursor关键字 - for -query
tmp_xm cursor for select bm2 from **** where bmlx='xmbm' and bm in ('');
单个游标变量可以正常使用,多个游标变量会报未知的问题(暂未找到解决方案),可以使用循环 for in
for x in(select * from ) loop
***;
end loop;
补充一个需要按逗号或其他字符分割一个字符串,然后再在存储处理的方法 regexp_split_to_table
do
$$
declare
v_bmbh varchar(20);
v_jgbh varchar(20);
x record;
begin
v_jgbh:='123';
for x in ( select regexp_split_to_table('1,2,3'::text,','::text) id from dual) loop
select bmbh into v_bmbh from pt_bm where id = x.id::numeric and jgbh = v_jgbh;
raise notice 'v_bmbh:%', x.id;
end loop;
end;
$$
//后续补充
以上,如有疏漏不足之处,请指正。