PL-SQL-函数

  • 时间:
  • 浏览:64
  • 来源:it300
在本章中,我们将讨论PL/SQL中的函数。函数与过程相同,只是它返回一个值。因此,前一章的所有讨论对于函数也是正确的。

创建函数

独立函数是使用CREATEFUNC.语句创建的。CREATEORREPLACRERECEPROCEDURE语句的简化语法如下.<

<预类="结果notranslate">>CREATE[ORREREPLACE]ORREREPLACE[ORREREREREREREREREPLACE]函数函数名.[(参数_名称[IN.....|...|OUT.|OUT..|OUOUOUOUOUOUOUT.]类型.[.]]]]]])]RETURN返回返回._数据类型{IS.{..{AS.{AS BEGIN.{BEGIN.{BEGIN.{BEGIN.<函数.{.{函数.{函数.{.{class="list">
  • 函数名指定函数的名称。

  • [OR REPLACE]选项允许修改现有函数。

  • 可选参数列表包含参数的名称、模式和类型。IN表示从外部传递的值,OUT表示用于返回过程外部值的参数。

  • 函数必须包含.语句。

  • 离子体包含可执行部分。

  • AS关键字用于代替IS关键字创建独立函数。

  • .

    下面的示例说明如何创建和调用独立函数。这个函数返回客户表中的客户总数。

    我们将使用在PL/SQL变量章

    Preclass=
    Select*从客户选择 -------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------- ----------  |  1 | Ramesh   |  32 | Ahmedabad |  2000.00 | |  2 | Khilan   |  25 | Delhi     |  1500.00 | |  3 | kaushik  |  23 | Kota      |  2000.00 | |  4 | Chaitali |  25 | Mumbai    |  6500.00 | |  5 | Hardik   |  27 | Bhopal    |  8500.00 | |  6 | Komal    |  22 | MP        |  4500.00 |  ---- ---------- ----- ----------- --------- 
    CREATE or REPLACE Functionation totalCustomers RETURN number is.number(2):=0;BEGIN SELECT count(*)为总数;RETURN.;END;/

    当使用SQL提示符执行上述代码时,它将产生以下结果

    函数创建。

    调用函数

    在创建函数时,您给出函数必须做什么的定义。要使用函数,必须调用该函数来执行定义的任务。当程序调用一个函数时,程序控制被传递给被调用函数。

    A被调用函数执行定义的任务,当其返回语句被执行时,或者当到达最后一个结束语句时,程序控制返回给主程序。

    要调用函数,只需要传递required参数以及函数名,如果函数返回一个值,则可以存储返回的值。下面的程序从匿名块.

    DECLARE c号(2);BEGIN c: =totalCustomers() ;BEGIN c:=totalCustomers();dbms_output.put_line('客户的总编号.'|c;END; /<>totalCustomeCustomers<>re class="result notranslate">TotalNo.of Customers: 6 PL/SQL过程成功完成。下面的示例演示了声明、定义和调用一个简单的PL/SQL函数,该函数计算并返回两个值的最大值。

    DECLARE a number;b number;c number;FUNCTION findMax(x IN number,y IN number)RETURN number is z number;BEGIN IF x>THEN z:=x;ELSE Z:=Y;ENDEIF;RERETURNz;END;ENENDEENDEIF;RERETURNz;END;BEGIN a:=23;BEGIN a:=23;b 45;b:24b:24b:2445;45c:=45findMax(a,b);c:=findMax findMax=findMax(b);dbms_output_output_output.put_line('Maximum of(23,23,45):'|C;END; /<|c END; /
    >p>当上述代码在SQSQL提示符处执行时,生成以下结果8722;8722;8722;

    >当pre class="result notranslate">Maximum of(23,45):45 PL/SQL程序成功完成。我们已经看到一个程序或子程序可以调用另一个子程序。当一个子程序调用它自己时,它被称作递归调用,这个过程被称为.sion.

    为了说明这个概念,让我们计算一个数的阶乘。数n的因子定义为

    n!=n*(n-1)!=n*(n-1)*(n-2)!...=n*(n-1)*(n-2)*(n-3)...1

    1>>1>>1>>1>1>1>下列程序计算给定数字的阶乘,通过递归地调用自己来计算给定数字的阶乘,递归地调用自己

    <前类="预打印白翻译片">DECLAR号号;阶乘数;函数事实(x数)返回数是f数;函数事实(x数)返回数是f数;BEGINX(x数)返回数是f数是f数;BEGIN IF x=0THEN IF x=0THENXIFx=0THEN IF x=0THEN f f:=1;ELSE f:=1;ELSE f:=1;ELSE f==ELSE f(x-1;ELSE(X-1)f f(X-ELSEBEGIN num:=6;fact.:=.(num);dbms_output.put_line('Factorial'|num|是'|fact.);END; /

    当在SQL提示符处执行上述代码时,它产生以下结果

    Factorial 6是720 PL/SQL过程成功完成。

    猜你喜欢

    希腊最高法院批准俄罗斯对比特币嫌疑人的请求

    希腊最高法院批准俄罗斯对比特币嫌疑人的请求希腊最高法院上周五表示,一名据称使用比特币数字货币洗钱40亿美元的俄罗斯人应该被引渡到俄罗斯,一位法院消息人士说。AlexanderV

    2019-02-01

    塑造美国网络防御的创造性破坏和自满情绪

    塑造美国网络防御的创造性破坏和自满情绪创造性的破坏,思维的范式转换取代现有的秩序,可能是一个难以捉摸的概念,但它作为人类行为驱动力的力量是不可否认的。在硅谷和其他美国的高层科技

    2019-02-01

    为什么我(非常)担心PRISM

    为什么我(非常)担心PRISM美国国家安全局正在利用我们的数字生活,监控语音电话,电子邮件,社交媒体以及谁知道什么。美国国家安全局方面的人说,这是为了国家安全;它已经停止了恐怖

    2019-02-01

    先发优势:为什么新的恶意软件最初会打败反恐

    先发优势:为什么新的恶意软件最初会打败反恐虽然反病毒解决方案可以有效对抗广泛使用的恶意软件,但是有一个很好的机会,新的恶意软件会躲过那些解决方案。最近有重大安全事件的报告激增,

    2019-02-01

    台湾银行抢劫与朝鲜黑客有关

    台湾银行抢劫与朝鲜黑客有关最近针对台湾一家银行的网络抢劫事件已被安全研究人员联系到一个据信在朝鲜境外活动的臭名昭着的威胁组织。黑客利用SWIFT全球金融网络大致窃取来自台湾远东

    2019-02-01