`
xiangxuehai_jiaer
  • 浏览: 90185 次
  • 性别: Icon_minigender_2
  • 来自: 西安
社区版块
存档分类
最新评论

PL/SQL函数与过程

阅读更多

一、函数

  函数参数包括三种类型:输入参数、输出参数、输入输出参数;

  说明:函数必须包含return语句。

                 当定义参数函数时,只指定数据类型,不能指定长度。

1、无参函数

创建:

SQL> create or replace function cur_datetime

  2  return varchar2

  3  is

  4  begin

  5    return to_char(sysdate,'yyyy-mm-dd');

  6  end;

  7  /

调用:

SQL> begin

  2    dbms_output.put_line(cur_datetime);

  3  end;

  4  /

2012-03-14

 

PL/SQL 过程已成功完成。

2、带有输入参数的函数(缺省是in

创建:

SQL> create or replace function get_sal(name varchar2)

  2  return number

  3  as

  4    v_sal empl.sal%type;

  5  begin

  6    select sal into v_sal from empl where upper(ename)=upper(name);

  7    return v_sal;

  8  end;

  9  /

调用:

SQL> begin

  2    dbms_output.put_line('工资'||get_sal('&name'));

  3  end;

  4  /

输入 name 的值:  jack

原值    2:   dbms_output.put_line('工资'||get_sal('&name'));

新值    2:   dbms_output.put_line('工资'||get_sal('jack'));

工资0

 

PL/SQL 过程已成功完成。

或者:

SQL> select get_sal('&name') 工资 from dual;

输入 name 的值:  jack

原值    1: select get_sal('&name') 工资 from dual

新值    1: select get_sal('jack') 工资 from dual

 

      工资

----------

       400

 

3、带有输出参数的函数

创建:

SQL> create or replace function get_info(no number,title out varchar2)

  2  return varchar2

  3  as

  4    name empl.ename%type;

  5  begin

  6    select ename,dept into name,title from empl

  7      where eno=no;

  8    return name;

  9  end;

 10  /

 

函数已创建。

调用:

SQL> declare

  2    v_name empl.ename%type;

  3    v_dept empl.dept%type;

  4  begin

  5    v_name:=get_info(&eno,v_dept);

  6    dbms_output.put_line('姓名:'||v_name||',部门'||v_dept);

  7  end;

  8  /

输入 eno 的值:  1001

原值    5:   v_name:=get_info(&eno,v_dept);

新值    5:   v_name:=get_info(1001,v_dept);

姓名:jack,部门sa

 

PL/SQL 过程已成功完成。

4、带有输入输出参数的函数

创建:

SQL> create or replace function get_upd_info

  2  (no number,sal_chg in out number)

  3  return varchar2

  4  as

  5    name empl.ename%type;

  6  begin

  7    update empl set sal=sal+sal_chg where eno=no

  8  returning ename,sal into name,sal_chg;

  9  return name;

 10  end;

 11  /

 

函数已创建。

调用:

SQL> declare

  2    v_eno empl.eno%type;

  3    v_name empl.ename%type;

  4    v_salchg empl.sal%type;

  5  begin

  6    v_eno:=&eno;

  7    v_salchg:=&incre;

  8    v_name:=get_upd_info(v_eno,v_salchg);

  9    dbms_output.put_line('姓名:'||v_name||'新工资'||v_salchg);

 10  end;

 11  /

输入 eno 的值:  1001

原值    6:   v_eno:=&eno;

新值    6:   v_eno:=1001;

输入 incre 的值:  400

原值    7:   v_salchg:=&incre;

新值    7:   v_salchg:=400;

姓名:jack新工资400

 

PL/SQL 过程已成功完成。

二、过程

 过程参数包括三种类型:输入参数、输出参数、输入输出参数。

1、建立无参的过程

创建:

SQL> create or replace procedure out_time

  2  is

  3    begin

  4      dbms_output.put_line(sysdate);

  5    end;

  6  /

 

过程已创建。

调用:

SQL> exec out_time

14-3 -12

 

PL/SQL 过程已成功完成。

2、带有输入参数的过程

创建:

SQL> create or replace procedure add_emp(

  2    v_eno empl.eno%type,

  3    v_ename empl.ename%type,

  4    v_dept empl.dept%type,

  5    v_sal empl.sal%type)

  6  is

  7  begin

  8    insert into empl values(v_eno,v_ename,v_dept,v_sal);

  9  end;

 10  /

 

过程已创建。

调用:

SQL> exec add_emp('1011','ella','sa',6000);

 

PL/SQL 过程已成功完成。

3、带有输出参数的过程

创建:

SQL> create or replace procedure update_sal(

  2    no number,

  3    salary number,

  4    name out varchar2)

  5  is

  6  begin

  7    update empl set sal=salary where eno=no returning ename into name;

  8  end;

  9  /

 

过程已创建。

调用:

SQL> declare

  2    v_ename empl.ename%type;

  3  begin

  4    update_sal(&eno,&salary,v_ename);

  5    dbms_output.put_line('姓名:'||v_ename);

  6  end;

  7  /

输入 eno 的值:  1001

输入 salary 的值:  3000

原值    4:   update_sal(&eno,&salary,v_ename);

新值    4:   update_sal(1001,3000,v_ename);

姓名:jack

 

PL/SQL 过程已成功完成。

4、带有输入输出参数的过程

创建:

SQL> create or replace procedure divide(num1 in out number,num2 in out number)

  2  is

  3    v1 number;

  4    v2 number;

  5  begin

  6    v1:=trunc(num1/num2);

  7    v2:=mod(num1,num2);

  8    num1:=v1;

  9    num2:=v2;

 10  end;

 11  /

 

过程已创建。

调用:

SQL> declare

  2    n1 number:=&n1;

  3    n2 number:=&n2;

  4  begin

  5    divide(n1,n2);

  6    dbms_output.put_line('商:'||n1||'余数'||n2);

  7  end;

  8  /

输入 n1 的值:  3

原值    2:   n1 number:=&n1;

新值    2:   n1 number:=3;

输入 n2 的值:  4

原值    3:   n2 number:=&n2;

新值    3:   n2 number:=4;

商:0余数3

 

PL/SQL 过程已成功完成。

分享到:
评论

相关推荐

    PL/SQL 的函数与存储过程练习

    PL/SQL 的函数与存储过程练习 PL/SQL 的函数与存储过程练习

    Pl/Sql程序设计

    1、PL/SQL简介 2、PL/SQL基础 3、记录和表 4、在PL/SQL中使用SQL 5、内置SQL函数 6、游标 7、过程和函数 ...

    Oracle PL/SQL程序设计(第5版)(下册)第二部分

    通过使用过程、函数、触发器和包,建立模块化的PL/SQL应用。 内容推荐 《Oracle PL/SQL程序设计(第5版)》基于Oracle数据库11g,从PL/SQL编程、PL/SQL程序结构、PL/SQL程序数据、PL/SQL中的SQL、PL/SQL应用构建、...

    PL/SQL 常用函数

    PL/SQL 常用函数,如日期格式转换,数字,常用数学行数,字符串截取,定位,等函数

    PL/SQL 程序设计

    PL/SQL 程序设计 本章主要重点:  PL/SQL概述  PL/SQL块结构  PL/SQL流程  运算符和表达式  游标  异常处理  数据库存储过程和函数  包  触发器

    sql pl/sql存储过程

    SQL and Pl/SQL培训文档 第一天 第一章 PL/SQL 简介 安装scott/tigger用户模式 Example1 标准的PL/SQL块结构 PL/SQL块类型 Example2:子程序,函数,程序包 PL/SQL代码的执行 第二章 PL/SQL数据类型 预定义数据类型 ...

    oracle pl/sql 存储过程和函数与触发器

    oracle pl/sql 存储过程和函数与触发器

    oracle PL/SQL测试题目和详细答案

    pl/sql存储过程,函数,游标,以及存储过程中的基础知识,绝对值得你收藏的经典题目,让你的pl/sql得到最大的锻炼。让你的数据库逻辑更加灵活。

    常用的PL/SQL函数

    Oracle 函数大全(字符串函数,数学函数,日期函数,逻辑运算函数,其他函数)

    Oracle/PL/SQL函数说明

    本人经过多年的工作整理的Oracle/PL/SQL函数说明,TXT版本的,希望能对你有所帮助。

    12oracle的PL/SQL编程-函数.包.触发器 PPT

    12oracle的PL/SQL编程-函数.包.触发器 PPT 12oracle的PL/SQL编程-函数.包.触发器 PPT

    PL/SQL程序设计

    PL/SQL是对SQL语言存储过程语言的扩展。从ORACLE6以后,ORACLE的RDBMS附带了PL/SQL。它现在已经成为一种过程处理语言,简称PL/SQL。目前的PL/SQL包括两部分,一部分是数据库引擎部分;另一部分是可嵌入到许多产品...

    Oracle 11g SQL和PL SQL从入门到精通 pdf格式电子书 下载(二)

     第19章 pl/sql函数  第20章 pl/sql包  第21章 触发器  第22章 使用对象类型 第四部分 pl/sql系统包  第23章 使用大对象  第24章 读写os文件  第25章 开发多媒体应用  第26章 开发web应用  第27章 dbms_sq...

    PL/SQL 6.0 汉化版

    PL/SQL支持所有SQL数据类型和所有SQL函数,同时支持所有ORACLE对象类型  . PL/SQL块可以被命名和存储在ORACLE服务器中,同时也能被其他的PL/SQL程序或SQL命令调用,任何客户/服务器工具都能访问PL/SQL程序,具有很...

    oracle存储过程、游标、函数、PL/SQL块

    包含oracle存储过程的增、删、查、改 %type、%rowtype的使用 自定义函数 PL/SQL块

    Oracle PL/SQL程序设计(第5版)(下册) 第一部分

    通过使用过程、函数、触发器和包,建立模块化的PL/SQL应用。 内容推荐 《Oracle PL/SQL程序设计(第5版)》基于Oracle数据库11g,从PL/SQL编程、PL/SQL程序结构、PL/SQL程序数据、PL/SQL中的SQL、PL/SQL应用构建、...

    pl/sql程序设计ppt

    包括过程,函数,触发器和包以及pl/sql基本程序结构的讲解

    Oracle_PLSQL语言基础

    PL/SQL支持所有SQL数据类型和所有SQL函数,同时支持所有ORACLE对象类型  . PL/SQL块可以被命名和存储在ORACLE服务器中,同时也能被其他的PL/SQL程序或SQL命令调用,任何客户/服务器工具都能访问PL/SQL程序,具有...

    PL/SQL版本控件插件

    把PL/SQL上的存储过程,包,函数等加到VSS上。 装好后,在PL/SQL菜单里会多一个VCS的选项的,很好用。

Global site tag (gtag.js) - Google Analytics