# PL/SQL编程基础(二)

本文介绍了Oracle数据库中的PL/SQL编程基础,包括系统内置的数学、字符串、日期和统计函数,以及如何创建和调用用户定义函数。用户定义函数示例展示了如何计算选修特定课程的学生人数。此外,还详细阐述了游标的概念、优点及操作步骤,包括显式游标的声明、打开、读取和关闭。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PL/SQL编程基础(二)

系统内置函数

Oracle提供了丰富的系统内置函数,常用的系统内置函数有:数学函数、字符串函数、日期和时间函数和统计函数。

数学函数

数学函数用于对数字表达式进行数学运算并返回运算结果,常用的数学函数如表9.1所示。
在这里插入图片描述

字符串函数

字符串函数用于对字符串进行处理。
在这里插入图片描述

日期函数

日期函数用于处理DATE和TIMSTAMP日期数据类型。
在这里插入图片描述

统计函数

统计函数用于处理数值型数据。
在这里插入图片描述

用户定义函数

用户定义函数是存储在数据库中并编译过的PL/SQL块,调用用户定义函数要用表达式,并将返回值返回到调用程序。
在这里插入图片描述

创建用户定义函数
在Oracle中,创建用户定义函数使用CREATE FUNCTION语句。
创建选修某门课程的学生人数的函数
CREAT OR REPLACE FUNCTION fun Number (p_cname IN char)
RETURN number
AS
result number;
BEGIN
SELECT COUNT(sno) INTO result
FROM course a,score b
WHERE a.cno=b.cno AND cname=p_cname;
RETURN (result);
END funNumber;
调用用户定义函数:
在表达式中通过函数名称直接调用。
例子:调用函数funNumber查询选修某门课程的学生人数。
DECLARE
v_num number;
BEGIN
v_num:=funNumber(‘数据库系统’);
DBMS_OUTPUT.PUT_LINE(‘选修数据库系统的人数是:’||v_num);
END;
在这里插入图片描述
例子:删除函数funNumber
DROP FUNCTION funNumber

游标

由SELECT语句返回的完整行集称为结果集,使用SELECT语句进行查询时可以得到这个结果集,但有时用户需要对结果集中的某一行或部分行进行单独处理,这在SELECT的结果集中无法实现,游标就是提供这种机制的对结果集的一种扩展,PL/SQL通过游标提供了对一个结果集进行逐行处理的能力。
游标包括以下两部分的内容:
游标结果集:定义游标的SELECT语句返回的结果集的集合。
游标当前行指针:指向该结果集中某一行的指针

游标具有下列优点;
●允许定位在结果集的特定行。
●从结果集的当前位置检索一行或一部分行。
●支持对结果集中当前位置的行进行数据修改。
●为由其他用户对显示在结果集中的数据库数据所做的更改提供不同级别的可见性支持
游标包括显式游标和隐式游标,显示游标的操作要遵循声明游标、打开游标、读取数据和关闭游标等步骤,而使用隐式游标不需要执行以上步骤,只需要让PL/SQL处理游标并简单地编写SELECT语句。
显式游标
使用显式游标操作步骤:首先要声明游标,使用前要打开游标,然后读取数据,使用完毕要关闭游标。
1.声明游标
声明游标需要定义游标名称和SELECT语句。格式为 DECLARE CURSOR<游标名>
IS
<SELECT语句>
例如,下面是一个游标定义地实例。
DECLARE CURSOR curStudent1
IS
SELECT sno,sname,tc
FROM student
WHERE speciality=‘计算机’;
2.打开游标
该步骤执行声明游标时定义的SELECT语句,并将查询到的结果集存于内存中等待读取。
语法格式
OPEN<游标名>
3.读取数据
使用FETCH语句从结果集中读取游标所指向的行,并将结果存入INTO子句的变量列表中。
语法格式

FETCH<游标名> INTO <变量名>
FETCH语句每执行一次,游标向下移动一行,直至结束。
例子:使用游标,输出计算机专业的学生情况。


DECLARE
v_sno char(6); /*设置3个变量,注意变量的数据类型*/
v_sname char(12);
v_tc number (2); 
CURSOR curStudent3 /*声明游标*/
IS
SELECT sno,sname,tc
FROM student
WHERE speciality='计算机';
BEGIN
OPEN curStudent3; /*打开游标*/
FETCH curStudent3 INTO v_sno, v_sname, v_tc; /*读取的游标数据存
放到指定的变量中*/
WHILE curStudent3%FOUND LOOP /*如果当前游标指向有效的一
行,则进行循环,否则退出循环*/
DBMS_OUTPUT.PUT_LINE('学号:'||v_sno||' 姓名:'||v_sname||'
总学分:'||TO_char(v_tc));
FETCH curStudent3 INTO v_sno, v_sname, v_tc;
END LOOP;
CLOSE curStudent3; /*关闭游标*/
END;

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值