Oracle与PostgreSQL内置的编程语言有什么不同
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,本篇内容主要讲解"Oracle与PostgreSQL内置的编程语言有什么不同",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Oracle与PostgreSQ
千家信息网最后更新 2025年01月20日Oracle与PostgreSQL内置的编程语言有什么不同
本篇内容主要讲解"Oracle与PostgreSQL内置的编程语言有什么不同",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Oracle与PostgreSQL内置的编程语言有什么不同"吧!
Oracle和PostgreSQL都提供了内置的编程语言(PL/SQL vs PL/pgSQL),在输入输出参数的声明上有较大的不同,如输入参数中存在inout/out参数,Oracle的函数可以有返回值,但PG不允许有返回值,只能通过参数返回。
Oracle
创建函数
TEST-orcl@DESKTOP-V430TU3>CREATE or replace FUNCTION sf_testparameter(p1 varchar2,p2 int,p3 varchar2,p4 in out int) 2 RETURN varchar2 3 is 4 begin 5 p4 := 1; 6 return 'test'; 7 end; 8 /Function created.
执行
TEST-orcl@DESKTOP-V430TU3>select sf_testparameter(null,null,null,:p4) from dual;select sf_testparameter(null,null,null,:p4) from dual *ERROR at line 1:ORA-06572: Function SF_TESTPARAMETER has out arguments
不能在SQL中执行,但可以在PL/SQL中执行
TEST-orcl@DESKTOP-V430TU3>set serveroutput onTEST-orcl@DESKTOP-V430TU3>declare 2 p4 number; 3 ret varchar2(100); 4 begin 5 ret := sf_testparameter(null,null,null,p4); 6 dbms_output.put_line('p4 = '||p4||',ret='||ret); 7 end; 8 /p4 = 1,ret=test
PostgreSQL
创建函数,参数中存在inout类型的参数,返回值必须与该参数类型一样,而且return不能返回实际值。
[local:/data/run/pg12]:5120 pg12@testdb=# CREATE or replace FUNCTION sf_testparameter(p1 text,p2 int,p3 text,inout p4 int)pg12@testdb-# RETURNS text pg12@testdb-# AS $$pg12@testdb$# beginpg12@testdb$# return 'test';pg12@testdb$# end;pg12@testdb$# $$ LANGUAGE 'plpgsql';ERROR: function result type must be integer because of OUT parameters[local:/data/run/pg12]:5120 pg12@testdb=# [local:/data/run/pg12]:5120 pg12@testdb=# drop function sf_testparameter;ERROR: could not find a function named "sf_testparameter"[local:/data/run/pg12]:5120 pg12@testdb=# CREATE or replace FUNCTION sf_testparameter(p1 text,p2 int,p3 text,inout p4 int)pg12@testdb-# RETURNS int pg12@testdb-# AS $$pg12@testdb$# beginpg12@testdb$# return 1;pg12@testdb$# end;pg12@testdb$# $$ LANGUAGE 'plpgsql';ERROR: RETURN cannot have a parameter in function with OUT parametersLINE 5: return 1; ^[local:/data/run/pg12]:5120 pg12@testdb=# [local:/data/run/pg12]:5120 pg12@testdb=# CREATE or replace FUNCTION sf_testparameter(p1 text,p2 int,p3 text,inout p4 int)pg12@testdb-# RETURNS int pg12@testdb-# AS $$pg12@testdb$# beginpg12@testdb$# return;pg12@testdb$# end;pg12@testdb$# $$ LANGUAGE 'plpgsql';CREATE FUNCTION[local:/data/run/pg12]:5120 pg12@testdb=# select sf_testparameter(null,null,null,null); sf_testparameter ------------------(1 row)[local:/data/run/pg12]:5120 pg12@testdb=#
如参数中有多个out参数,则要求返回record类型
[local:/data/run/pg12]:5120 pg12@testdb=# drop function sf_testparameter;ION sf_testparameter(p1 text,p2 int,p3 text,inout p4 int,out p5 text) RETURNS record AS $$begin return;end;$$ LANGUAGE 'plpgsql';\df sf_testparameterselect sf_testparameter(null,null,null,null,null);select sf_testparameter(null,null,null,null);DROP FUNCTION[local:/data/run/pg12]:5120 pg12@testdb=# CREATE or replace FUNCTION sf_testparameter(p1 text,p2 int,p3 text,inout p4 int,out p5 text)pg12@testdb-# RETURNS text pg12@testdb-# AS $$pg12@testdb$# beginpg12@testdb$# return 'test';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=# [local:/data/run/pg12]:5120 pg12@testdb=# drop function sf_testparameter;ERROR: could not find a function named "sf_testparameter"[local:/data/run/pg12]:5120 pg12@testdb=# CREATE or replace FUNCTION sf_testparameter(p1 text,p2 int,p3 text,inout p4 int,out p5 text)pg12@testdb-# RETURNS recordpg12@testdb-# AS $$pg12@testdb$# beginpg12@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=# \df sf_testparameterList of functions-[ RECORD 1 ]-------+------------------------------------------------------------Schema | publicName | sf_testparameterResult data type | recordArgument data types | p1 text, p2 integer, p3 text, INOUT p4 integer, OUT p5 textType | func[local:/data/run/pg12]:5120 pg12@testdb=# [local:/data/run/pg12]:5120 pg12@testdb=# select sf_testparameter(null,null,null,null,null);ERROR: function sf_testparameter(unknown, unknown, unknown, unknown, unknown) does not existLINE 1: select sf_testparameter(null,null,null,null,null); ^HINT: No function matches the given name and argument types. You might need to add explicit type casts.[local:/data/run/pg12]:5120 pg12@testdb=# select sf_testparameter(null,null,null,null); sf_testparameter ------------------ (,)(1 row)[local:/data/run/pg12]:5120 pg12@testdb=#
不管有多少个out参数,都归为return参数,在调用时不需要作为参数输入,难怪PG要求返回record类型。
[local:/data/run/pg12]:5120 pg12@testdb=# drop function sf_testparameter;DROP FUNCTION[local:/data/run/pg12]:5120 pg12@testdb=# CREATE or replace FUNCTION sf_testparameter(p1 text,p2 int,p3 text,inout p4 int,out p5 text,out p6 text)pg12@testdb-# RETURNS recordpg12@testdb-# AS $$pg12@testdb$# beginpg12@testdb$# return;pg12@testdb$# end;pg12@testdb$# $$ LANGUAGE 'plpgsql';CREATE FUNCTION[local:/data/run/pg12]:5120 pg12@testdb=# select sf_testparameter(null,null,null,null); sf_testparameter ------------------ (,,)(1 row)[local:/data/run/pg12]:5120 pg12@testdb=# [local:/data/run/pg12]:5120 pg12@testdb=#
到此,相信大家对"Oracle与PostgreSQL内置的编程语言有什么不同"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
参数
不同
编程语言
语言
编程
类型
函数
输入
内容
实际
学习
实用
更深
较大
兴趣
多个
实用性
操作简单
方法
更多
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
吉林中天网络技术有限公司
开发股票期货软件开发
河南网络时钟服务器地址
化妆品分销软件开发
青岛迪尼软件开发
为做好网络安全保障工作
联通网络技术研究
科旭网络技术
广西数据库安全箱厂家现货
开启代理服务器怎么关
北京安浩网络技术服务
挚友财务软件服务器
怎么让2台服务器不共享
湖软件开发
以色列网络技术
服务器 网卡聚合
广西软件开发市场
网络安全三同步定义
软件开发公司运作流程
人口分布数据库能干什么
冲上云霄网络安全吗
政府使用计算机网络安全
深圳安卓app软件开发
互联网科技公司有哪些业务
安徽程序软件开发服务
w中国网络安全控制中心
昆山技术软件开发报价方案
低年级网络安全教育课件
网络技术公司文案
办税服务厅网络安全制度