推广

oracle转postgreSQL修改点

iseeyu2年前 (2024-02-21)推广126

查询结果

postgre中可以用string_agg函数实现相同的功能,具体用法如下:

SELECT
    tr_gw_no,
    string_agg ( tr_status :: TEXT, ',' ) status
FROM
    trade 
WHERE
    tr_gw_no = 12198006 
    OR tr_gw_no = 12167001 
GROUP BY
    tr_gw_no;

20、start with connect by函数的题:

oracle的这个函数是用来查树形结构的,即同一张的表的记录有父子级关系的那种。oracle中用法如下:

select module_id
    from sys_modules
start with module_id = ?
connect by prior module_id = module_fid;

这就表示查询module_id?的所有子module,即父模块idmodule_fid?的所有的记录。postgre可以用WITH RECURSIVE实现相同的效果,如下:

WITH RECURSIVE subtabela AS (
    SELECT
        module_id 
    FROM
        sys_modules 
    WHERE
        module_id = ? UNION ALL
    SELECT
        tt.module_id 
    FROM
        sys_modules tt
        INNER JOIN subtabela st ON tt.module_fid = st.module_id 
    ) SELECT
    * 
FROM
    subtabela;

21、存储过程调用的问题:

postgre11开始,支持存储过程procedure,之前的版本只支持function。通过代码去调用存储过程时,要注意以下三点:

  • 调用存储过程的sql语句不需要加大括号,加了大括号的调用的是function而不是procedure;
  • 如果存储过程中用了事务,那个在代码中调用时就不要使用spring的事务了,否则会冲突;
  • 如果存储过程有inout参数,表示这个即是输入又是输出参数,都要进行设置,oracle可以只当作输入或者输出来用。

比如现在有一个名为test_procedure(IN "id" int4, INOUT "result" int4)的存储过程,java中调用方式如下:

Session session = sessionFactory.getCurrentSession();
Connection conn = session.connection();
CallableStatement cs = null;
Integer returnInfo = -1;
cs = conn.prepareCall("call p_paynum_processing_create(?,?)");
// oracle中调用要加大括号
// cs = conn.prepareCall("{call p_paynum_processing_create(?,?)}");
// 输入的参数
cs.setInt(1, id.intValue());
// 输出的参数
cs.setInt(2, -1); // oracle中这一行可以不用
cs.registerOutParameter(2, Types.INTEGER);
// 执行存储过程
cs.execute();
// 获取返回值,-1为操作异常
returnInfo = cs.getInt(2);

22、连接查询的问题:

oracle中外连接可以这样写:

select * from tableA a, tableB b  where a.id = b.id(+);

(+)的一方是副表,另一方是主表,即上面那种写法表示左外连接。postgre不支持这种写法,可以用left join代替。

23、instr函数的问题:

instr函数表示包含,postgre中可以用strpos函数替代。

扫描二维码推送至手机访问。

版权声明:本文由西安泽虎代运营发布,如需转载请注明出处。

转载请注明出处https://www.0291.com.cn/post/57599.html

相关文章

支付宝不小心投保了能退吗(支付宝不小心买了保险怎么退)

支付宝不小心投保了能退吗(支付宝不小心买了保险怎么退)

按照平台的规则,用户购买保险都是自愿的行为,可以根据自己的需求随时加入保险,也可以随时退出,所以支付宝不小心投保了是能退的,这一点是不需要太过担心的。...

超级推荐哪个计划好,超级推荐可以建几个计划(超级推荐计划方案)

超级推荐哪个计划好,超级推荐可以建几个计划(超级推荐计划方案)

很多商家不清楚商品是放在一个计划内还是分开来比较好,其实这需要看实际情况来决定的,当需要独立分配预算时,保证爆款的预算不会被其他商品占用,可以将该预算下的商品单独建一个计划。...

分享电子书阅读器扎堆发布是互联网发展的一种趋势。

分享电子书阅读器扎堆发布是互联网发展的一种趋势。

+时代,网络世界资源飞速传播,您是否充分利用网络资源来发展自己?云裂变,网站托管行业唯一上市企业,帮助您在互联网发展的道路上走的更好。 今年的春天刚刚渐露头角,一些硬件厂商就开始小试身手,从国际手机厂商三星、LG、苹果到国内的360、魅族、华为等诸多硬件厂商早已按捺不住频频发布新产品...

淘宝开店铺如何定位自己的产品(淘宝的产品定位是什么)

淘宝开店铺如何定位自己的产品(淘宝的产品定位是什么)

先要弄明白自身的优势和资源对自己进行深入分析,身份方面:比如说自己是自由职业者、固定上班族、在校学生、刚毕业展示没有工作人员、其他社会兼职人员,或者是实体店企业店的店主等。...

网站排名在平时的SEO提升中如何防止网址被降权惩罚。

网站排名在平时的SEO提升中如何防止网址被降权惩罚。

「SEO」在平时的SEO提升中如何防止网址被被降权惩罚?SEO是获得网站访问量关键来源于之一,可是依据武汉市SEO提升互联网大数据显示信息,在50%的网址都是有过被被降权惩罚的亲身经历,这类亲身经历就如同大冬季工作走在大街上被楼顶倒了一盆冰冷的洗脸水,心里猛然(此处省略万字符),那麼在平时的SEO提...

现在,非常期待与您的又一次邂逅

我们努力让每一部企业宣传片和抖音短视频成为商业大片