Oracle与PostgreSQL的区别有哪些
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,这篇文章主要讲解了"Oracle与PostgreSQL的区别有哪些",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Oracle与PostgreSQL的区
千家信息网最后更新 2025年01月20日Oracle与PostgreSQL的区别有哪些
这篇文章主要讲解了"Oracle与PostgreSQL的区别有哪些",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Oracle与PostgreSQL的区别有哪些"吧!
Oracle
SQL> CREATE OR REPLACE function func_out(pi_in NUMBER,pi_out1 out number,pi_out2 out varchar2) 2 return date 3 as 4 v_date date; 5 begin 6 v_date := sysdate; 7 pi_out1 := pi_in; 8 pi_out2 := pi_in; 9 return v_date; 10 end; 11 /函数已创建。SQL>SQL> set serveroutput onSQL> declare 2 v_date date; 3 v_out1 number; 4 v_out2 varchar2(200); 5 begin 6 v_date := func_out(1,v_out1,v_out2); 7 dbms_output.put_line('v_date = '||v_date||';v_out1 = '||v_out1||';v_out2 = '||v_out2); 8 end; 9 /v_date = 14-2月 -20;v_out1 = 1;v_out2 = 1PL/SQL 过程已成功完成。SQL>
输出参数分别是number、varchar2,函数返回date类型。
PostgreSQL
[local:/data/run/pg12]:5120 pg12@testdb=# CREATE OR REPLACE function func_out(pi_in int,pi_out1 out int,pi_out2 out text) pg12@testdb-# returns datepg12@testdb-# aspg12@testdb-# $$pg12@testdb$# declarepg12@testdb$# v_date date;pg12@testdb$# begin pg12@testdb$# v_date := current_date();pg12@testdb$# pi_out1 := pi_in;pg12@testdb$# pi_out2 := to_char(pi_in);pg12@testdb$# return v_id; pg12@testdb$# end;pg12@testdb$# $$ LANGUAGE 'plpgsql';ERROR: function result type must be record because of OUT parameters[local:/data/run/pg12]:5120 pg12@testdb=#
提示结果类型必须为record
[local:/data/run/pg12]:5120 pg12@testdb=# CREATE OR REPLACE function func_out(pi_in int,pi_out1 out int,pi_out2 out text) pg12@testdb-# returns recordpg12@testdb-# aspg12@testdb-# $$pg12@testdb$# declarepg12@testdb$# v_date date;pg12@testdb$# begin pg12@testdb$# v_date := current_date;pg12@testdb$# pi_out1 := pi_in;pg12@testdb$# pi_out2 := to_char(pi_in);pg12@testdb$# return null; pg12@testdb$# end;pg12@testdb$# $$ LANGUAGE 'plpgsql';ERROR: RETURN cannot have a parameter in function with OUT parametersLINE 11: return null; ^[local:/data/run/pg12]:5120 pg12@testdb=#
改为record后,返回null值,提示如存在OUT参数不允许返回值。
[local:/data/run/pg12]:5120 pg12@testdb=# CREATE OR REPLACE function func_out(pi_in int,pi_out1 out int,pi_out2 out text) pg12@testdb-# returns recordpg12@testdb-# aspg12@testdb-# $$pg12@testdb$# declarepg12@testdb$# v_date date;pg12@testdb$# begin pg12@testdb$# v_date := current_date;pg12@testdb$# pi_out1 := pi_in;pg12@testdb$# pi_out2 := pi_in;pg12@testdb$# return; pg12@testdb$# end;pg12@testdb$# $$ LANGUAGE 'plpgsql';CREATE FUNCTION[local:/data/run/pg12]:5120 pg12@testdb=#
创建成功,尝试调用
[local:/data/run/pg12]:5120 pg12@testdb=# dopg12@testdb-# $$pg12@testdb$# declarepg12@testdb$# v_ret record;pg12@testdb$# v_out1 int;pg12@testdb$# v_out2 text;pg12@testdb$# beginpg12@testdb$# v_ret := func_out(1,v_out1,v_out2);pg12@testdb$# raise notice 'ret is : %d',v_ret;pg12@testdb$# endpg12@testdb$# $$pg12@testdb-# ;ERROR: function func_out(integer, integer, text) does not existLINE 1: SELECT func_out(1,v_out1,v_out2) ^HINT: No function matches the given name and argument types. You might need to add explicit type casts.QUERY: SELECT func_out(1,v_out1,v_out2)CONTEXT: PL/pgSQL function inline_code_block line 7 at assignment[local:/data/run/pg12]:5120 pg12@testdb=#
提示没有相应的函数,原因是PG会忽略OUT参数,把out参数去掉重新调用
[local:/data/run/pg12]:5120 pg12@testdb=# dopg12@testdb-# $$pg12@testdb$# declarepg12@testdb$# v_ret record;pg12@testdb$# v_out1 int;pg12@testdb$# v_out2 text;pg12@testdb$# beginpg12@testdb$# v_ret := func_out(1);pg12@testdb$# raise notice 'ret is : %',v_ret;pg12@testdb$# endpg12@testdb$# $$;NOTICE: ret is : (1,1)DO[local:/data/run/pg12]:5120 pg12@testdb=# [local:/data/run/pg12]:5120 pg12@testdb=#
返回的是record,第一个值为1,第二个值为1
1.PG会忽略输出参数,判断一个函数是否是同一个函数,仅判断输入参数;
2.如存在OUT参数,PG函数无法返回结果,只能通过OUT参数返回。
感谢各位的阅读,以上就是"Oracle与PostgreSQL的区别有哪些"的内容了,经过本文的学习后,相信大家对Oracle与PostgreSQL的区别有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
参数
函数
学习
提示
成功
内容
类型
结果
输出
原因
就是
思路
情况
文章
更多
知识
知识点
篇文章
跟着
过程
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
高并发数据库出租
网络安全保密风险隐患自查
中国邮政网络技术客户端
博学易知考试数据库好用吗
教育学外文数据库
5g+网络技术标准
华三网络技术大赛基础知识
30m服务器
苹果激活服务器服务时间
山西网络安全周
德医互联网科技
零极网络技术
数据库为什么要定义类型
四川服务器虚拟化定做
服务器负载均衡测试方案
为做好网络安全防护工作
如何添加网页代理服务器
小学网络安全教育安排
学软件测试好还是软件开发好
珠海电子软件开发
mssql数据库工具
美的软件开发校招面试问题
网络安全竞赛颁奖流程
上传文件到服务器java
佛山地产软件开发咨询
瀚堂典藏数据库怎么登录
网络安全模式下无法上网吗
apn能设置代理服务器吗
邵阳软件开发培训好不好
怀旧服服务器无法存档