函数重载Oracle和PG的异同是什么
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,本篇内容主要讲解"函数重载Oracle和PG的异同是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"函数重载Oracle和PG的异同是什么"吧!Orac
千家信息网最后更新 2025年11月07日函数重载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安全错误
数据库的锁怎样保障安全
哪个大学有软件开发
房地产数据库开发
论述数据库设计过程的步骤
数据库新建拓扑
网络安全协议原理结构和应用
网络安全小组组长是什么职位
服务器灾备是什么意思
清华大学 计算机网络技术
唐山软件开发机构
花都网络安全运维
服务器脚本语言找不到
怎么搭建个人低配服务器
白城妇炕网络技术有限公司
湖州网警支队网络安全
企业多电脑数据库同步
转行学软件开发 6k
西安计算机网络技术机构
哪些软件开发智力
服务器内存安装费用
互联网科技图片壁纸
房地产数据库开发
数据库系统基础 pdf
武汉软件开发培训机构学费是多少
河南淳诺互联网科技
网络安全宣传周四招
企业多电脑数据库同步
网络安全的基本应用
服务器安全狗如果改密码
梦幻西游神武坛服务器
阿里巴巴arm 服务器