资源预览内容
第1页 / 共4页
第2页 / 共4页
第3页 / 共4页
第4页 / 共4页
亲,该文档总共4页全部预览完了,如果喜欢就下载吧!
资源描述
实验六 函数与过程实验报告 实验目的 1. 掌握存储函数和存储过程的建立方法和用法 2. 掌握调用存储函数和存储过程的方法3. 了解和掌握函数和过程的区别 预备知识1. PL/SQL程序设计 2. 游标的使用实验原理 1. 建立过程 CREATE OR REPLACE PROCEDURE (参数1, 参数N) IS 局部声明 BEGIN 可执行语句; EXCEPTION 例外处理程序; END ; 参数代表 变量名 IN|OUT|IN OUT 数据类型 := | DEFAULT 值 1. 示例 CREATE PROCEDURE branch_sum(p_brnch branch.branch_code%TYPE) IS declare variables; BEGIN 可执行语句; EXCEPTION WHEN NO_DATA_FOUND THEN 语句 ; END branch_sum; 2. 建立函数 CREATE OR REPLACE FUNCTION (参数1, 参数N) RETURN datatype IS 局部声明 BEGIN 可执行语句 ; EXCEPTION 例外处理程序 END ; 参数代表的是 变量名 IN|OUT|IN OUT 数据类型 := | DEFAULT 值 1. 示例 CREATE FUNCTION day_fn(mday NUMBER) RETURN CHAR IS disp_day CHAR(15); BEGIN 可执行语句 ; RETURN disp_day; EXCEPTION 语句 ; END day_fn; 3. 函数和过程的参数 用于定义正式参数的行为 可以与其他子程序一起使用 三个参数模式 IN (默认) OUT IN OUT 避免在函数中使用 OUT 和 IN OUT 模型 IN 允许将值传送到被调用的子程序 在子程序内部,它的作用如同常数 实际对应参数可以是一个常数、数据量、初始化变量或表达式 可以被初始化为默认值 OUT 允许值返回到子程序的调用者 在子程序的内部,它的作用如同未初始化的变量 实际的对应参数应为一个变量;不能为一个常量或一个表达式 其值不能对另一个变量赋值,也不能对其自身再次赋值 IN OUT 允许传送初始值,并将更新的值返回给调用者 在子程序内部,它的作用如同未初始化的变量 实际的对应参数应为一个变量;不能为一个常量或一个表达式 它可以被赋值,它的值也可以对另一个变量赋值 4. 过程和函数的调用 1. 过程的调用 可以作为 PL/SQL 语句调用过程 示例: branch_sum(NYK); 可以从 SQL*Plus 中调用单独的过程 示例: SQL EXECUTE branch_sum(NYK); 2. 函数的调用 作为 PL/SQL 语句调用函数 示例:chardays := day_fn(3); 作为表达式的一部分调用函数 示例:IF day_fn(3) = TUESDAY THEN 语句 ; END IF; 实验内容 1. 将实验四中的程序1改写成一个函数CountWord,完成对于输入的字符串,计算出一共 有多少个单词,单词作为返回值。create or replace function countwords (str varchar2) return int asc varchar2(1);cnt int;i int;len int;tag boolean;begin len:=length(str);cnt:=0;tag:=true;for i in 1.len loopc:=substr(str,i,1);if tag and (c betweenaandzor c between AandZ) then tag:=false;cnt:=cnt+1;elsif not tag and not (c between a and zor c between Aand Z)then tag:=true;end if;end loop;return cnt;end countwords; 2. 写一个小的程序块,调用CountWord函数,并将其返回的结果输出。 3. declare 4. str varchar2(4000); 5. s int; 6. 7. begin 8. str:= 9. s:=countwords(str); 10. 11. dbms_output.put_line (s); 12. end;13. 3. 建立一个过程interest来计算利息,包含参数tag,int型,表示更新存款表(tag=0) ,更新 借贷(tag=1) ;参数利率ratio,double型。 4. 建立一个表filter_customer(customer_name,street,city);建立一个过程filter将符合条件的用 户信息放入这张表中。过程接口如下: 比如filter(2,1000,3,1000)表示将所有存款余额小于等于1000,贷款总额大于1000的用户 信息放入filter_customer中(之前需清空filter_customer的数据) 。 5. 使用不同的参数调用过程filter,然后查询filter_customer表。 实验总结 1、函数和过程的区别是什么? 函数和过程非常相似,函数与过程之间的主要区别在于,函数必须有返回值,并且可以作 为一个表达式的一部分,函数不能作为一个完整的语句使用,函数返回值的数据类型在创 建函数的时候定义。函数头部必须使用return子句制定函数返回的数据类型,在函数体内, 任何地方都可以使用return语句返回结果值。调用函数与过程也不相同调用函数时必须使用 一个变量来保存返回的结果值。
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号