Oracle数据库学习笔记_oracle标量型函数、内联表值型函数和多声明表值型函数创建及应用

1.创建标量型UDF,语法如下:

CREATE FUNCTION [OWNER_NAME] FUNCTION_NAME

([{@PARAMETER_NAME SCALAR_PARAMETER_DATA_TYPE [= DEFAULT]} [,…N]])

RETURNS SCALAR_RETURN_DATA_TYPE

[WITH <FUNCTION_OPTION> [,…N]]

[AS]

BEGIN

FUNCTION_BODY

RETURN SCALAR_EXPRESSION

END

<FUNCTION_OPTION> ::=

{ENCRYPTION|SCHEMABLNDING}

各参数说明如下:

OWNER_NAME:指定UDF的所有者;

FUNCTION_NAME:指定UDF的名称。DATABASE_NAME.OWNER_NAME.FUNCTION_NAME应是唯一的。

@PARAMETER_NAME:定义一个或多个参数的名称。一个函数最多可以定义1024个参数,每个参数前用@符号标明。参数的作用范围是整个函数,参数只能替代常量,不能替代表名,列名或其他数据库对象的名称。UDF不支持输出参数。

2.创建内联表值型UDF,语法如下:

CREATE FUNCTION [OWNER_NAME] FUNCTION_NAME

([{@PARAMETER_NAME SCALAR_PARAMETER_DATA_TYPE [=DEFAULT]}[,…N]])

RETURNS TABLE

[WITH <FUNCTION_OPTION> [,… ]]

[AS]

RETURN [() SELECT-STMT[]]

各参数说明如下:

TABLE:指定返回值为一个表。

SELECT-STMT:单个SELECT语句,确定返回的表是数据。

其余参数与标量型用户自定义函数相同。

例如:创建返回所有订购某类产品的公司信息函数

USE PANGU

GO

CREATE FUNCTION ORDERFIRMS(@PRODUCTID VARCHAR(30))

RETURNS TABLE

AS

RETURN (SELECT F.FIRM_ID,F_NAME,F_INTRO

FROM FIRMS F, ORDERS O

WHERE F.FIRM_ID=O.FIRM_ID

AND O.OEDER_ID IN (SELECT O.ORDER_ID

FROM PRODUCTS P, ORDERS O

WHERE P.P_ID=@PRODUCTID

AND P.P_ID)=O.P_ID))

GO

--调用函数

SELECT * FROM ORDERFIRMS(10030001)

运行结果如下:



3.创建多声明表值型UDF,语法如下:

CREATE FUNCTION [OWNER_NAME] FUNCTION_NAME

([{@PARAMETER_NAME SCALAR_PARAMETER_DATA_TYPE [= DEFAULT]}[,…N]])

RETURNS @RETURN_VARIBLE TABLE <TABLE_TYPE_DEFINITION>

[WITH <FUNCTION_OPTION> [,…N]]

[AS]

BEGIN

FUNCTION_BODY

RETURN

END

<TABLE_TYPE_DEFINITION> ::=

({COLUMN_DEFINITION|TABLE_CONSTRAINT} [,…N])

各参数说明如下:

@RETURN_VARIABLE:一个TABLE类型的变量,用于存储和累积返回的表中的数据行。

其余参数与标量型UDF相同。

原文地址:https://www.cnblogs.com/tongying/p/13203265.html