精华内容
下载资源
问答
  • 函数和过程

    2015-07-19 12:05:28
    PASCAL 给我们提供了一些标准函数,我们不用了解这些函数如何求出来的,只管直接调用它们,挺 方便的。如正弦函数,余弦函数,算术平方根......有了这些函数,我们觉得很省事。 但是对于求下面式子: 1!+2!...
    PASCAL 给我们提供了一些标准函数,我们不用了解这些函数如何求出来的,只管直接调用它们,挺
    方便的。如正弦函数,余弦函数,算术平方根......有了这些函数,我们觉得很省事。
    但是对于求下面式子:
    1!+2!+3!+...+10!=?

    2^7+3^8+4^9=?

    函数的编写:

    FUNCTION 函数名(形式参数表):函数类型;
    VAR 函数的变量说明;
    BEGIN
    函数体
    END;

    一个函数的编写可分成三部份:

    一是函数首部,即第一个语句。它必须以FUNCTION开头,函数名是自己取的,取名的原则是便于记忆,和文件名的取名规则类似。形式参数(简称形参)表以标识符的形式给出,相当于函数中的自变量。参数可以有多个,也可以有多种类型。不同类型的参数之间用“;”隔开,同类型的参数如有多个,则用“,”隔开,在其后得加上说明。如:
    FUNCTION A1(A,B,C:INTEGER;D,E,F:REAL):REAL;
    在最后,函数属于哪种类型,还得表示出来。在本例中,该函数为实型。

    二是函数的变量说明部分,对在本函数中将要用到的变量作类型说明,这一点和以前学的变量一样。如果程序不用变量,则此部分也可省掉。

    三是函数体,本函数的功能实现就在于此,编写的语句就在里面。


    编写一求阶乘的函数

    FUNCTION js(n:integer):longint;
    var i:integer;
    s:longint;
    begin
    s:=1;
    for i:=1 to n do
    s:=s*i;
    js:=s;
    end;

    函数的调用

    PROGRAM 程序名(INPUT,OUTPUT);
    VAR 主程序变量说明;


    FOUNCTION 函数名(形参表):函数类型;
    VAR 函数变量说明;
    BEGIN
      函数体
    END;{FUNCTION}


    BEGIN
      主程序
    END .{PROGRM}


    在主程序中,我们把函数的全部说明放在主程序的变量说明和程序体之间,然后在主程序的执行部分就可以直接调用自定义函数了。注意:在函数的说明部分,要用形参,但在程序的执行部分调用自定义函数时,就得用实参了。

    定义的阶乘函数,求5!,9!

    program functionsample;
    var a1,a2:longint;
    function js(n:integer):longint;
    var i:integer;s:longint;
    begin
    s:=1;
    for i:=1 to n do
    s:=s*i;
    js:=s;
    end;
    begin
    a1:=js(5);
    a2:=js(9);
    writeln(’5!=’,a1,’ ’,’9!=’,a2);
    end.


    在FUNCTION语句中,用的是形参N,在主程序调用中,调用函数是用的实参,如:JS(5);

    在函数说明中用到的变量I,S则是局部变量,只能在函数部分使用,一旦出了函数则失去意义

    函数不能单独使用,一定要结合主程序才能运行。


    过程

    过程和函数一样,也是子程序。一个过程对应一个需要完成的任务。PASCAL中提供了不少标准过程,如:READ,WRITE,GET,NEW,PUT......这些标准过程在程序中可以直接调用。但仅仅这些标准过程还不能满足我们的需要,我们还要自己定义过程,就象函数一样。但函数必须以值的形式返回,而过程不一定返回一个值,只是执行一个任务而已;函数只能返回一个值,而过程可以返回不止一个值。所以函数不能取代过程。

    过程的定义

    PROCEDURE 过程名(形式参数);
    VAR 过程的变量说明;
    BEGIN
    过程体
    END;


    一个过程也分为三部分:
    1:过程的首部。过程必须以PROCEDURE开头,过程名的取名规则和函数名一样,括号里面是形式参数,如形参不止一种,则中间用“;”隔开,同类形参如不止一个,则中间用“,”隔开。另:有时侯过程不用加参数。
    2:过程的说明部分,用VAR开头,它只能对过程中的变量进行说明,同样是局部变量。另:如果过程不用变量,则可将说明部分省略。
    3:过程体。它是过程的执行部分。

    过程的调用

    program 程序名;
    var 主程序的变量说明;
    procedure 过程名(形式参数表);
    var 过程的变量说明;
    begin
      过程体
    end;
    begin
      主程序体
    end.


    定义一个打印由“*”组成的矩阵的过程,该矩阵四行五列。
    procedure print;
    var i,j:integer;
    begin
    for i:=1 to 4 do
    begin
    for j:=1 to 5 do write(’*’);
    writeln;
    end;
    end;


    该过程就没有参数,直接执行打印一个固定矩阵的任务,而且也没返回值

    定义过程fa求N!‘program exp7_5 ;
    var x:integer ; t:real ;
    procedure fa(n:integer);
    var
    k:integer;
    begin
    t:=1;
    for k:=2 to n do
    t:=t*k;
    end;
    begin
    read(x) ;
    fa(x);
    writeln( x:5 , t:8) ;
    end;


    函数与过程的区别

    1、函数不能作为独立的一个语句使用,而过程可以。


    2、函数的值是由函数名返回的,而过程不能

    变量形参

    在过程定义的语句中,有个参数表,在参数表中,除了前面我们已用的形参,还有变量形参。变量形参的作用是:它可以作为过程的出口参数。我们可以把过程中求出的结果用变量形参输出到过程外,在过程外面可以调用该参数,因此,该参数是全局变量。其格式上的区别是在变量形参前加上VAR即可。

    求1!+2!+3!+...+n!

    program e9;
    var j:integer;s,m:longint;
    procedure js(n:integer;var m:longint);
    var i:integer;
    begin
    m:=1;
    for i:=1 to n do m:=m*i;
    end;
    begin
    s:=0;
    for j:=1 to 10 do
    begin
    js(j,m);
    s:=s+m;
    end;
    writeln(’s=’,s);
    end.


    过程JS中用到了变量形参M,在过程中定义为LONGINT类型;而在主程序的变量说明中也得对变量形参M说明为同种类型LONGINGT。于是,在过程中和主程序中都可以用该变量了。


    形参与变量形参

    (1)形参:在函数或过程定义中,没有加VAR 说明的参数,在调用函数或过程时,调用程序将实参的值直接传递给形参,起着赋值作用。
    (2)变量形参:在函数或过程定义中,加有VAR 说明的参数,在调用函数或过程时,调用程序将实参的变量地址传递给变量形参,因此当过程或函数处理中,改变变量形参的值,则实参的变量值也随之改变。(共享同一个存储单元)


    测试

    program p7_13(input,output);
    Var  x,n:integer;
    procedure chan(x:integer;var y:integer);
    begin
    x:=x+5;
    y:=y+5;
    writeln(’x=’,x,’y=’,y);{语句②}
    end;
    begin {主程序}
    x:=10;
    n:=10;
    writeln(’x=’,x,’n=’,n); {语句①}
    chan(x,n);
    writeln(’x=’,x,’n=’,n); {语句③}
    end.


    过程chan中定义了形参x和变量形参y。在调用过程时,形参x接受实参的值10,然后将它加5,但是形参值的改变并不影响主程序中实参的值(数值传递),所以返回主程序后,输出实参x 的值仍为10,可见,实参x和形参x是两个不同的变量。y为变量形参,对于变量形参的操作实际上就是对相应实参n的操作(共享存储地址)。y的初值为10,调用过程后,值为15,返回主程序时,值15被带回主程序,故n也为15。

    定义一个过程,实现将实数x拆分为整数部分n和小数部分p,在主程序输出。


    小结形参和变量形参

    ①形参传值:为形参分配存贮单元,将实参的值赋给形参,过程体内对形参的操作不影响实参的值。一旦过程体执行完毕,系统将收回形参所占用的存贮单元,形参的值也就不复存在。
    ②变量形参传地址:将实参的地址传给对应的变量形参,即变量形参与实参共享实参的地址,因此对变量形参的操作就是对实参的操作。一旦过程体执行完毕,系统将收回变量形参所占用的存贮单元,但运算结果已保留在对应的实参中。

    变量及其作用域

    全程变量:主程序中被说明的变量。
    局部变量:在过程或函数中被说明的变量。
    在程序中,局部变量、全程变量进行存取的适用范围是不一样的,即作用域不一样。
    局部变量的作用域是它们所在的子程序。因形式参数也只在子程序中有效,因此也属于局部变量。
    对于局部变量的作用域可以这样理解:当局部变量所在子程序被调用时,局部变量才被分配有效的存储单元;当返回调用程序时,局部变量所占的存储单元就被释放。
    全程变量的作用域分为两种情况:
    ①在全程变量和局部变量不同名时,其作用域是整个程序。
    ②在全程变量和局部变量同名时,局部变量屏蔽了全程变量。


    Program p7_10(input,output);
    var
    m:integer; {m为全程变量}
    procedure test2;
    var m:integer; {定义m为局部变量}
    begin
    m:=100;
    end;
    begin {主程序}
    m:=5;
    writeln(’Before the test2 call,the m is:’,m);{输出过程调用前的m值}
    test2; {调用过程test2}
    writeln(’After the test2 call,the m is:’,m); {输出过程调用后的m值}
    end.


    函数和过程的区别

    1、标识符不同。函数的标识符为FUNCTION,过程为:PROCEDURE。
    2、函数中一般不用变量形参,用函数名直接返回函数值;而过程如有返回值,则必须用变量形参返回。
    3、过程无类型,不能给过程名赋值;函数有类型,最终要将函数值传送给函数名。
    4、函数在定义时一定要进行函数的类型说明,过程则不进行过程的类型说明。
    5、调用方式不同。函数的调用出现在表达式中,过程调用,由独立的过程调用语句来完成。
    6、过程一般会被设计成求若干个运算结果,完成一系列的数据处理,或与计算无关的各种操作;而函数往往只为了求得一个函数值。


    具体教程:http://download.csdn.net/download/boyxiejunboy/8913279(不用积分哦)

    展开全文
  • 很清晰的说明了存储过程和函数区别
  • 存储过程和函数存在以下几个区别: 1)一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。存储过程,功能强大,可以执行包括修改表等一系列数据库操作;用户定义函数不能用于执行一组修改...
  • oracle中函数和存储过程区别和联系  在oracle中,函数和存储过程是经常使用到的,他们的语法中有很多相似的地方,但也有自己的特点。刚学完函数和存储过程,下面来大家分享一下自己总结的关于函数和存储过程的...

    oracle中函数和存储过程的区别和联系

      在oracle中,函数和存储过程是经常使用到的,他们的语法中有很多相似的地方,但也有自己的特点。刚学完函数和存储过程,下面来和大家分享一下自己总结的关于函数和存储过程的区别。

    一、存储过程

    1.定义

      存储过程是存储在数据库中提供所有用户程序调用的子程序,定义存储过程的关键字为procedure。

    2.创建存储过程

      create [or replace] procedure 存储过程名

      [(参数1 类型,参数2 out 类型……)]                                       

      as

        变量名  类型;

      begin

        程序代码体

      end;

      示例一:无参无返

    复制代码
    create or replace procedure p1
    --or replace代表创建该存储过程时,若存储名存在,则替换原存储过程,重新创建
    --无参数列表时,不需要写()
    as
    begin
      dbms_output.put_line('hello world');
    end;
    
    --执行存储过程方式1
    set serveroutput on;
    begin
      p1();
    end;
    --执行存储过程方式2
    set serveroutput on;
    execute p1();
    复制代码

      示例二:有参有返

    复制代码
    create or replace procedure p2
    (name in varchar2,age int,msg out varchar2)
    --参数列表中,声明变量类型时切记不能写大小,只写类型名即可,例如参数列表中的name变量的声明
    --参数列表中,输入参数用in表示,输出参数用out表示,不写时默认为输入参数。
    ------------输入参数不能携带值出去,输出参数不能携带值进来,当既想携带值进来,又想携带值出去,可以用in out
    as
    begin
      msg:='姓名'||name||',年龄'||age;
      --赋值时除了可以使用:=,还可以用into来实现
      --上面子句等价于select '姓名'||name||',年龄'||age into msg from dual;
    end;
    --执行存储过程
    set serveroutput on;
    declare
      msg varchar2(100);
    begin
      p2('张三',23,msg);
      dbms_output.put_line(msg);
    end;
    复制代码

     

      示例三:参数列表中有in out参数

    复制代码
    create or replace procedure p3
    (msg in out varchar2)
    --当既想携带值进来,又想携带值出去,可以用in out
    as
    begin
      dbms_output.put_line(msg); --输出的为携带进来的值
      msg:='我是从存储过程中携带出来的值';
    end;
    
    
    --执行存储过程
    set serveroutput on;
    declare
      msg varchar2(100):='我是从携带进去的值';
    begin
      p3(msg);
      dbms_output.put_line(msg);
    end;
    复制代码

       示例四:存储过程中定义参数

    复制代码
    create or replace procedure p4
    as
      --存储过程中定义的参数列表
      name varchar(50);
    begin
      name := 'hello world';
      dbms_output.put_line(name);
    end;
    ---执行存储过程
    set serveroutput on;
    execute p4();
    复制代码

     

     总结:1.创建存储过程的关键字为procedure。

          2.传参列表中的参数可以用in,out,in out修饰,参数类型一定不能写大小。列表中可以有多个输入输出参数。

          3.存储过程中定义的参数列表不需要用declare声明,声明参数类型时需要写大小的一定要带上大小。

        4.as可以用is替换。

          5.调用带输出参数的过程必须要声明变量来接收输出参数值。

          6.执行存储过程有两种方式,一种是使用execute,另一种是用begin和end包住。

          存储过程虽然有很多优点,但是它却不能使用return返回值。当需要使用return返回值时,我们可以使用函数。

     

    二、存储函数

    1.函数与存储过程的结构类似,但是函数必须有一个return子句,用于返回函数值。

    复制代码
    create or replace function f1
    return varchar--必须有返回值,且声明返回值类型时不需要加大小
    as
      msg varchar(50);
    begin
       msg := 'hello world';
       return msg;
    end;
    
    --执行函数方式1
    select f1() from dual;
    --执行函数方式2
    set serveroutput on;
    begin 
      dbms_output.put_line(f1());
    end;
    复制代码

     

     

     三、存储过程与存储函数的区别和联系

      相同点:1.创建语法结构相似,都可以携带多个传入参数和传出参数。

              2.都是一次编译,多次执行。

      不同点:1.存储过程定义关键字用procedure,函数定义用function。

          2.存储过程中不能用return返回值,但函数中可以,而且函数中必须有return子句。

          3.执行方式略有不同,存储过程的执行方式有两种(1.使用execute2.使用begin和end),函数除了存储过程的两种方式外,还可以当做表达式使用,例如放在select中(select f1() form dual;)。

    总结:如果只有一个返回值,用存储函数,否则,一般用存储过程。

     

    展开全文
  • Oracle过程和函数区别

    千次阅读 2014-03-03 16:56:31
    Oracle过程和函数相信大家都比较了解,下面就为您详细介绍Oracle过程和函数二者之间的区别,希望可以让您对Oracle过程和函数有更深的认识。 Oracle过程和函数都以编译后的形式存放在数据库中,函数可以没有参数也...

    Oracle过程和函数相信大家都比较了解,下面就为您详细介绍Oracle过程和函数二者之间的区别,希望可以让您对Oracle过程和函数有更深的认识。

    Oracle过程和函数都以编译后的形式存放在数据库中,函数可以没有参数也可以有多个参数并有一个返回值。过程有零个或多个参数,没有返回值。函数和过程都可以通过参数列表接收或返回零个或多个值,函数和过程的主要区别不在于返回值,而在于他们的调用方式。Oracle过程是作为一个独立执行语句调用的:

     
    1. pay_involume(invoice_nbr,30,due_date); 

    函数以合法的表达式的方式调用:

     
    1. order_volumn:=open_orders(SYSDATE,30); 

    创建过程的语法如下:

     
    1. CREATE [ OR REPLACE] PROCEDURE [schema.]procedure_name  
    2. [parameter_lister]  
    3. {AS|IS}  
    4. declaration_section  
    5. BEGIN  
    6. executable_section  
    7. [EXCEPTION  
    8. exception_section]  
    9. END [procedure_name]   

    每个参数的语法如下:

     
    1. paramter_name mode datatype [(:=|DEFAULT) value] 

    mode有三种形式:IN、OUT、INOUT。

    IN表示在调用过程的时候,实际参数的取值被传递给该过程,形式参数被认为是只读的,当过程结束时,控制会返回控制环境,实际参数的值不会改变。

    OUT在调用过程时实际参数的取值都将被忽略,在过程内部形式参数只能是被赋值,而不能从中读取数据,在过程结束后形式参数的内容将被赋予实际参数。

    INOUT这种模式是IN和OUT的组合;在Oracle过程内部实际参数的值会传递给形式参数,形势参数的值可读也可写,过程结束后,形势参数的值将赋予实际参数。

    创建函数的语法和过程的语法基本相同,唯一的区别在于函数有RETUREN子句

     
    1. CREATE [ OR REPLACE] FINCTION [schema.]function_name  
    2. [parameter_list]  
    3. RETURN returning_datatype  
    4. {AS|IS}  
    5. declaration_section  
    6. BEGIN  
    7. executable_section  
    8. [EXCEPTION]  
    9. exception_section  
    10. END [procedure_name]   

    在执行部分函数必须有哟个或多个return语句。

    在创建函数中可以调用单行函数和组函数,例如:

     
    1. CREATE OR REPLACE FUNCTION my_sin(DegreesIn IN NUMBER)  
    2. RETURN NUMBER  
    3. IS   
    4. pi NUMBER=ACOS(-1);  
    5. RadiansPerDegree NUMBER;  
    6.  
    7. BEGIN  
    8. RadiansPerDegree=pi/180;  
    9. RETURN(SIN(DegreesIn*RadiansPerDegree));  
    10. END   
    展开全文
  • 存储过程和存储函数区别

    千次阅读 2018-09-09 12:46:33
    存储过程和存储函数区别 语法区别:关键字不一样, 存储函数比存储过程多了两个return。 本质区别:存储函数有返回值,而存储过程没有返回值。 如果存储过程想实现有返回值的业务,我们就必须使用out类型的参数...
    • 存储过程和存储函数的区别
    • 语法区别:关键字不一样,
      存储函数比存储过程多了两个return。
    • 本质区别:存储函数有返回值,而存储过程没有返回值。
      如果存储过程想实现有返回值的业务,我们就必须使用out类型的参数。
      即便是存储过程使用了out类型的参数,起本质也不是真的有了返回值,而是在存储过程内部给out类型参数赋值,在执行完毕后,我们直接拿到输出类型参数的值。
    展开全文
  • 存储过程和函数区别.pdf
  • 函数过程区别

    千次阅读 2018-05-15 09:17:35
    先思考一下,什么是函数? ...想想一般写函数,是不是有输入参数返回值?那,这两个如果都是非空集合,不就构成了一个从输入空间到输出空间的映射吗?(即给定一个参数有一个返回值与之对应)...
  • 函数和存储过程区别

    千次阅读 2015-12-22 14:08:08
    1.返回值的区别函数有1个返回值,而存储过程是通过参数返回的,可以有多个或者没有 2.调用的区别函数可以在查询语句中直接调用,而存储过程必须单独调用. 函数一般情况下是用来计算并返回一个计算结果而存储过程...
  • MySQL存储过程和函数区别

    千次阅读 2017-07-19 12:32:02
    存储函数和存储过程统称为存储例程(stored routine)。两者的定义语法很相似,但却是不同的内容。 存储函数限制比较多,比如不能用临时表,只能用表变量。还有一些函数都不可用等等。而存储过程的限制相对就比较少...
  • mysql中存储过程和函数区别

    千次阅读 2018-05-23 18:11:25
    概述1)一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。存储过程,功能强大,可以执行包括修改表等一系列数据库操作;用户定义函数不能用于执行一组修改全局数据库状态的操作。2)对于...
  •  存储过程和函数区别在于函数必须有返回值,而存储过程没有,存储过程的参数可以使用IN、OUT、INOUT类型,而函数的参数只能是IN类型的。如果有函数从其他类型的数据库迁移到MySQL,那么可能因此需要将函数改造成...
  • MySQL存储函数和存储过程区别

    千次阅读 2017-11-22 13:53:08
    存储过程与存储函数区别 1:存储函数和存储过程统称为存储例程(store routine),存储函数的限制比较多,例如不能用临时表,只能用表变量,而存储过程的限制较少,存储过程的实现功能要复杂些,而函数的实现功能针对性...
  • 目录(?)[+] ...过程和函数,它们被编译后保存在数据库中,称为持久性存储模块(Persistent Stored Module,PSM),可以反复调用,运行速度快。 1.1 存储过程 存储过程是由过程化 SQL 语句书写
  • 怎么查询,怎样写sql在sql 语句中判断不能用 == ,要用 = 就行了 ,赋值 用 := 函数  储存过程的相同点 不同点:函数的创建:函数只能在指定数据库中用。 存储方法一样delimiter $$create function 函数...
  • oracle数据库中函数和存储过程区别
  • 文章目录一、区别1、参数2、返回类型3、返回值4、调用方式二、使用1、创建函数2、创建存储过程 一、区别 1、参数 1函数:参数类型只有一种 2:存储过程的参数类型有in,out,inout 2、返回类型 1、自定义函数...
  • Oracle过程和函数相信大家都比较了解,下面就为您详细介绍Oracle过程和函数二者之间的区别,希望可以让您对Oracle过程和函数有更深的认识。 Oracle过程和函数都以编译后的形式存放在数据库中,函数可以没有参数也...
  • VB 过程函数区别

    2010-06-07 15:20:01
    VB 过程函数区别 VB 过程函数区别 VB 过程函数区别
  • 1.MySQL自定义函数简介 在MySQL中使用自定义函数也需要相应的要求,语法如下, 创建新函数: Create function function_name(参数列表) returns返回值类型 函数体内容 相关说明,函数名:应该合法的标识符,...
  • 本质上没区别。只是函数有如:只能返回一个变量的限制。而存储过程可以返回多个。而函数是可以嵌入在sql中使用的,可以在select中调用,而存储过程不行。执行的本质都一样。   函数限制比较多,比如不能用临时表,...
  • 数据库的使用中,经常用到函数和存储过程。都是为了实现某个sql功能,那么这两者有区别吗?都适用哪些场景?总结如下 总的来说函数限制比较多,如不能用临时表,只能用表变量等,而存储过程的限制相对就比较少。 1....
  • A:函数必须有返回值,而过程没有返回值。  B:函数可以单独执行,而过程必须通过execute执行。  C:函数可以嵌入到sql中执行,而过程不行。其实我们可以将比较复杂的查询写成函数,然后到存储过程中调用这些函数 ...
  • 存储过程和函数具体的区别

    千次阅读 2019-05-30 15:35:43
    存储过程: 可以使得对的管理、以及显示关于及其用户信息的工作容易得多。存储过程是 SQL 语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理。存储过程存储在数据库内,可由应用程序通过一个...
  • 1.MySQL自定义函数简介  在MySQL中使用自定义函数也需要相应的要求,语法如下, 创建新函数: Create function function_name(参数列表) returns返回值类型 函数体内容 相关说明, 函数名:应该合法的标识符,并且...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 837,200
精华内容 334,880
关键字:

函数和过程的区别