一、函数
函数参数包括三种类型:输入参数、输出参数、输入输出参数;
说明:函数必须包含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 的函数与存储过程练习
1、PL/SQL简介 2、PL/SQL基础 3、记录和表 4、在PL/SQL中使用SQL 5、内置SQL函数 6、游标 7、过程和函数 ...
通过使用过程、函数、触发器和包,建立模块化的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流程 运算符和表达式 游标 异常处理 数据库存储过程和函数 包 触发器
SQL and Pl/SQL培训文档 第一天 第一章 PL/SQL 简介 安装scott/tigger用户模式 Example1 标准的PL/SQL块结构 PL/SQL块类型 Example2:子程序,函数,程序包 PL/SQL代码的执行 第二章 PL/SQL数据类型 预定义数据类型 ...
oracle pl/sql 存储过程和函数与触发器
pl/sql存储过程,函数,游标,以及存储过程中的基础知识,绝对值得你收藏的经典题目,让你的pl/sql得到最大的锻炼。让你的数据库逻辑更加灵活。
Oracle 函数大全(字符串函数,数学函数,日期函数,逻辑运算函数,其他函数)
本人经过多年的工作整理的Oracle/PL/SQL函数说明,TXT版本的,希望能对你有所帮助。
12oracle的PL/SQL编程-函数.包.触发器 PPT 12oracle的PL/SQL编程-函数.包.触发器 PPT
PL/SQL是对SQL语言存储过程语言的扩展。从ORACLE6以后,ORACLE的RDBMS附带了PL/SQL。它现在已经成为一种过程处理语言,简称PL/SQL。目前的PL/SQL包括两部分,一部分是数据库引擎部分;另一部分是可嵌入到许多产品...
第19章 pl/sql函数 第20章 pl/sql包 第21章 触发器 第22章 使用对象类型 第四部分 pl/sql系统包 第23章 使用大对象 第24章 读写os文件 第25章 开发多媒体应用 第26章 开发web应用 第27章 dbms_sq...
PL/SQL支持所有SQL数据类型和所有SQL函数,同时支持所有ORACLE对象类型 . PL/SQL块可以被命名和存储在ORACLE服务器中,同时也能被其他的PL/SQL程序或SQL命令调用,任何客户/服务器工具都能访问PL/SQL程序,具有很...
包含oracle存储过程的增、删、查、改 %type、%rowtype的使用 自定义函数 PL/SQL块
通过使用过程、函数、触发器和包,建立模块化的PL/SQL应用。 内容推荐 《Oracle PL/SQL程序设计(第5版)》基于Oracle数据库11g,从PL/SQL编程、PL/SQL程序结构、PL/SQL程序数据、PL/SQL中的SQL、PL/SQL应用构建、...
包括过程,函数,触发器和包以及pl/sql基本程序结构的讲解
PL/SQL支持所有SQL数据类型和所有SQL函数,同时支持所有ORACLE对象类型 . PL/SQL块可以被命名和存储在ORACLE服务器中,同时也能被其他的PL/SQL程序或SQL命令调用,任何客户/服务器工具都能访问PL/SQL程序,具有...
把PL/SQL上的存储过程,包,函数等加到VSS上。 装好后,在PL/SQL菜单里会多一个VCS的选项的,很好用。