函数重载Oracle和PG的异同是什么
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,本篇内容主要讲解"函数重载Oracle和PG的异同是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"函数重载Oracle和PG的异同是什么"吧!Orac
千家信息网最后更新 2026年10月31日函数重载Oracle和PG的异同是什么
本篇内容主要讲解"函数重载Oracle和PG的异同是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"函数重载Oracle和PG的异同是什么"吧!
Oracle
Oracle不支持函数重载,一个函数名只能对应一个函数.
SQL> drop function func_1;函数已删除。SQL> CREATE function func_1(p_in NUMBER,p_out1 out number,p_out2 out varchar2) 2 return date 3 as 4 begin 5 return sysdate; 6 end; 7 /函数已创建。SQL> -- errorSQL> CREATE function func_1(p_in1 NUMBER,p_out1 out number,p_in2 in varchar2) 2 return date 3 as 4 begin 5 return sysdate; 6 end; 7 /CREATE function func_1(p_in1 NUMBER,p_out1 out number,p_in2 in varchar2) *第 1 行出现错误:ORA-00955: 名称已由现有对象使用SQL>SQL> -- errorSQL> CREATE function func_1(p_in1 NUMBER,p_out1 out number,p_in2 in varchar2,p_out2 out number) 2 return date 3 as 4 begin 5 return sysdate; 6 end; 7 /CREATE function func_1(p_in1 NUMBER,p_out1 out number,p_in2 in varchar2,p_out2 out number) *第 1 行出现错误:ORA-00955: 名称已由现有对象使用SQL>
虽然参数类型不同或者参数个数不同,但Oracle可直接替换函数
SQL> CREATE or replace function func_1(p_in1 NUMBER,p_out1 out number,p_in2 in varchar2) 2 return date 3 as 4 begin 5 return sysdate; 6 end; 7 /函数已创建。SQL> CREATE or replace function func_1(p_in1 NUMBER,p_out1 out number,p_in2 in varchar2,p_out2 out number) 2 return date 3 as 4 begin 5 return sysdate; 6 end; 7 /函数已创建。SQL> select object_name from dba_objects where object_name = 'FUNC_1';OBJECT_NAME--------------------------------------------------------------------------------FUNC_1SQL>
可通过Package实现函数重载.
SQL> -- packageSQL> create or replace package pk_overload 2 as 3 function func_1(p_in1 NUMBER,p_out1 out number,p_out2 out varchar2) return date; 4 function func_1(p_in1 NUMBER,p_out1 out number,p_in2 in varchar2) return date; 5 function func_1(p_in1 NUMBER,p_out1 out number,p_in2 in varchar2,p_out2 out number) return date; 6 end; 7 /程序包已创建。SQL>SQL> create or replace package body pk_overload 2 as 3 function func_1(p_in1 NUMBER,p_out1 out number,p_out2 out varchar2) return date 4 is 5 begin 6 null; 7 end; 8 9 function func_1(p_in1 NUMBER,p_out1 out number,p_in2 in varchar2) return date 10 is 11 begin 12 null; 13 end; 14 15 function func_1(p_in1 NUMBER,p_out1 out number,p_in2 in varchar2,p_out2 out number) return date 16 is 17 begin 18 null; 19 end; 20 21 end; 22 /程序包体已创建。SQL>
PostgreSQL
PG在函数级别上就可以实现函数重载
[local:/data/run/pg12]:5120 pg12@testdb=# -- overload[local:/data/run/pg12]:5120 pg12@testdb=# CREATE OR REPLACE function func_overload(p_in int,p_out1 out int,p_out2 out text) pg12@testdb-# returns recordpg12@testdb-# aspg12@testdb-# $$pg12@testdb$# declarepg12@testdb$# begin pg12@testdb$# raise notice 'func is : in,out,out';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=# CREATE OR REPLACE function func_overload(p_in1 int,p_out1 out int,p_in2 in text) pg12@testdb-# returns intpg12@testdb-# aspg12@testdb-# $$pg12@testdb$# declarepg12@testdb$# begin pg12@testdb$# raise notice 'func is : in,out,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=# CREATE OR REPLACE function func_overload(p_in1 int,p_out1 out int,p_out2 out text,pi_in2 in varchar) pg12@testdb-# returns recordpg12@testdb-# aspg12@testdb-# $$pg12@testdb$# declarepg12@testdb$# begin pg12@testdb$# raise notice 'func is : in,out,out,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=# [local:/data/run/pg12]:5120 pg12@testdb=# -- '1' --> UNKNOW默认匹配的是text[local:/data/run/pg12]:5120 pg12@testdb=# select func_overload(1,'1');NOTICE: func is : in,out,in func_overload ---------------(1 row)[local:/data/run/pg12]:5120 pg12@testdb=# select func_overload(1,'1'::varchar);NOTICE: func is : in,out,out,in func_overload --------------- (,)(1 row)[local:/data/run/pg12]:5120 pg12@testdb=#
PG会忽略输出参数,判断一个函数是否是同一个函数,仅判断输入参数;2.如存在OUT参数,PG函数无法返回结果,只能通过OUT参数返回
到此,相信大家对"函数重载Oracle和PG的异同是什么"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
函数
参数
异同
不同
内容
名称
对象
程序
错误
学习
实用
更深
个数
兴趣
实用性
实际
操作简单
方法
更多
朋友
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网电商科技
互联网最新的科技有限公司
中资互联网科技
互联网 科技公司
互联网科技公司电话
亿策互联网科技
万达互联网科技
联恩商钥互联网科技有限公司
互联网科技生活的内容
北京大学互联网科技怎么样
创业天下互联网科技有限公司
金融科技与互联网金融相同和不同
荆州市昕露互联网络科技有限公司
互联网科技革命什么开始
济南有互联网科技公司吗
21世纪互联网科技成就
福建互联网展示科技馆设计
北京互联网科技类企业分布
互联网科技大佬云集
武汉亿视互联网科技有限公司
深圳九邦互联网科技有限公司
重生之互联网科技帝国
深圳恒合互联网络科技有限公司
互联网与科技发展
广州互联网络科技有限公司
居家互联网科技有限公司
想开互联网科技公司怎么样
沐思想互联网科技有限公司
广东工业互联网大赛深圳学泰科技
互联网科技大佬云集