本篇内容主要讲解"甲骨文与一种数据库系统内置的编程语言有什么不同",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"甲骨文与一种数据库系统内置的编程语言有什么不同"吧!
神谕和一种数据库系统都提供了内置的编程语言(PL/SQL vs PL/pgSQL),在输入输出参数的声明上有较大的不同,如输入参数中存在输入/输出参数,甲骨文的函数可以有返回值,但宜在家长指导下观看的不允许有返回值,只能通过参数返回。
Oracle
创建函数
TEST-orcl @ DESKTOP-v 430 tu 3 creatorreplaceffects SF _ TEST参数(p1varchar 2,p2int,p3varchar2,p4inoutint)
2返回varchar2
3is
四开始
5p 4:=1;
6返回“测试”;
7结束
8/
已创建函数。执行
来自dual的TEST-orcl @ DESKTOP-v 430 t3selectsf _ TEST参数(null,null,null, P4);
从双重的中选择sf_testparameter(null,null,null,p4)
*
错误线路1:
ORA-06572:函数SF _ testparametersshasoutarguments不能在结构化查询语言中执行,但可以在PL/SQL中执行
TEST-orcl @ DESKTOP-v 430 t3setserveroutputon
TEST-orcl @ DESKTOP-v 430 t3declare
2p 4数字
3retvarchar 2(100);
四开始
5ret :=SF _ test参数(null、null、null、P4);
6 DBMS _输出。put _ line(' P4=' | | P4 | | ',ret=' | | ret);
7结束
8/
p4=1,ret=测试PostgreSQL
创建函数,参数中存在inout类型的参数,返回值必须与该参数类型一样,而且返回不能返回实际值。
[local :/data/run/pg12]:5120 pg12 @ testdb=# creatoreplaceffects SF _ test参数(p1text,p2int,p3text,inoutp4int)
pg12@testdb-#RETURNStext
pg12@testdb-#AS$$
pg12@testdb$#begin
pg12 @ testdb $ #返回“testdb
pg12 @ testdb $ # end
pg12 @ testdb $ # $ $ LANguage ' pl pgsql ';
错误:函数结果类型必须是
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$# begin
pg12@testdb$# return 1;
pg12@testdb$# end;
pg12@testdb$# $$ LANGUAGE 'plpgsql';
ERROR: RETURN cannot have a parameter in function with OUT parameters
LINE 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$# begin
pg12@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_testparameter select 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$# begin pg12@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 record pg12@testdb-# AS $$ pg12@testdb$# begin 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=# \df sf_testparameter List of functions -[ RECORD 1 ]-------+------------------------------------------------------------ Schema | public Name | sf_testparameter Result data type | record Argument data types | p1 text, p2 integer, p3 text, INOUT p4 integer, OUT p5 text Type | 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 exist LINE 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 record pg12@testdb-# AS $$ pg12@testdb$# begin pg12@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内置的编程语言有什么不同”有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/76886.html