### cusor的使用以及函数的创建和存储过程 在数据库编程中,`cusor`(应为`cursor`)的使用、函数的创建与存储过程是实现复杂逻辑的关键技术之一。下面将详细介绍这些概念及其应用。 #### Cursor的使用 1. **Cursor简介:** - `Cursor`是一种用于处理查询结果集的方式,它允许用户逐行处理数据。 - 在声明`Cursor`后,可以使用`OPEN`、`FETCH`和`CLOSE`等命令来控制`Cursor`的操作。 2. **Cursor声明与使用示例:** ```sql DECLARE CURSOR cursor IS SELECT * FROM table_; empInfo emp%ROWTYPE; BEGIN OPEN cursor; FETCH cursor INTO empInfo; WHILE (cursor%FOUND) LOOP -- 处理数据 -- 例如打印员工信息 dbms_output.put_line(empInfo.column_name); FETCH cursor INTO empInfo; END LOOP; CLOSE cursor; END; ``` 3. **另一种Cursor使用方式:** ```sql DECLARE cursor CURSOR IS SELECT * FROM table_; empInfo emp%ROWTYPE; BEGIN FOR empInfo IN cursor LOOP -- 直接在循环体内处理每一行数据 dbms_output.put_line(empInfo.column_name); END LOOP; END; ``` #### 函数的创建 1. **函数概述:** - 函数在数据库中用于执行特定计算或逻辑操作,并返回一个值。 - SQL Server中的函数有两种类型:标量函数和表值函数。 2. **标量函数示例:** ```sql ALTER FUNCTION dbo.GET_SPECIAL_NAME (@SPECIALTY_ID INT) RETURNS NVARCHAR(50) AS BEGIN DECLARE @DATA_COUNT INT; DECLARE @SPECIAL_NAME NVARCHAR(50); SET @DATA_COUNT = ( SELECT COUNT(1) AS DATA_COUNT FROM PS_EXPERT_SPECIALTYPES WHERE PES.SPECIALTY_ID = @SPECIALTY_ID AND PES.PARENT_ID IS NULL ); IF @DATA_COUNT > 0 BEGIN SET @SPECIAL_NAME = ( SELECT PES.SPECIALTY_NAME FROM PS_EXPERT_SPECIALTYPES WHERE PES.SPECIALTY_ID = @SPECIALTY_ID AND PES.PARENT_ID IS NULL ); END ELSE BEGIN SET @SPECIAL_NAME = ( SELECT PES.SPECIALTY_NAME FROM PS_EXPERT_SPECIALTYPES PES JOIN PS_EXPERT_SPECIALTYPES2 PES2 ON PES.SPECIALTY_ID = PES2.PARENT_ID WHERE PES2.SPECIALTY_ID = @SPECIALTY_ID AND PES.PARENT_ID IS NULL ); END RETURN @SPECIAL_NAME; END ``` #### 存储过程 1. **存储过程概述:** - 存储过程是一组预编译的SQL语句和其他命令的集合,可以在数据库中存储并重复调用。 - 存储过程提高了代码的复用性和执行效率,同时增强了应用程序的安全性。 2. **存储过程的创建与调用示例:** ```sql CREATE PROCEDURE order_tot_amt @o_id int, @p_tot int output AS BEGIN SELECT @p_tot = SUM(UnitPrice * Quantity) FROM OrderDetails WHERE OrderID = @o_id; END ``` 3. **存储过程的类型:** - **系统存储过程** (`sp_`开头),主要用于数据库的管理。 - **用户定义的存储过程**,由用户自定义。 - **临时存储过程**,分为局部临时存储过程(前缀`#`)和全局临时存储过程(前缀`##`)。 - **远程存储过程**,用于调用其他服务器上的存储过程。 - **扩展存储过程**,通常用C语言编写,可以访问操作系统级别的资源。 4. **存储过程的基本语法:** ```sql CREATE PROCEDURE [dbo].[procedure_name] (@parameter1 datatype, @parameter2 datatype output) AS BEGIN -- 存储过程主体 END ``` 通过以上介绍,我们可以看出`Cursor`、函数及存储过程在数据库应用中的重要作用。正确地使用这些技术可以极大地提高程序的性能和可维护性。
declare CURSOR cusor is select * from table_表名;
empInfo emp%ROWTYPE;
begin
open cursor ;//打开游标
fetch cursor into empInfo;---使游标向下一行
---判断此行是否有数据被发现
while(cursor%FOUND) LOOP
操作
fetch cusor into empInfo;//修改游标,继续向下
end loop;
end;
二:
declare cursor cusor is select from table_表名;
empInfo emp%ROWTYPE;
begin
for empInfo in cursor loop
操作
end loop;
end;
---------------------------------函数function的创建---------------
ALTER FUNCTION [dbo].[GET_SPECIAL_NAME]
(
@SPECIALTY_ID INT
)
RETURNS NVARCHAR(50)
AS
BEGIN
DECLARE @SPECIAL_NAME NVARCHAR(50) ;
SET @DATA_COUNT=(
SELECT
COUNT(1) AS DATA_COUNT
FROM
PS_EXPERT_SPECIALTY PES
WHERE
PES.SPECIALTY_ID = @SPECIALTY_ID
AND PES.PARENT_ID IS NULL);
IF @DATA_COUNT > 0
SET @SPECIAL_NAME=(
SELECT
PES.SPECIALTY_NAME
FROM
PS_EXPERT_SPECIALTY PES
WHERE
PES.SPECIALTY_ID = @SPECIALTY_ID
AND PES.PARENT_ID IS NULL);
ELSE
SET @SPECIAL_NAME=(
SELECT
PES.SPECIALTY_NAME
FROM
PS_EXPERT_SPECIALTY PES,
PS_EXPERT_SPECIALTY PES2
WHERE
PES.SPECIALTY_ID = PES2.PARENT_ID
剩余16页未读,继续阅读
- 粉丝: 0
- 资源: 25
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Udemy 课程 - 面向软件开发人员的 Java 编程大师班 讲师 - Tim Buchalka.zip
- Udemy 上的现代 JavaScript(从新手到忍者)课程的所有讲座文件 .zip
- Thumbnailator - Java 的缩略图生成库.zip
- The Net Ninja YouTube 频道上的 JavaScript DOM 教程的所有课程文件 .zip
- Swagger Spec 到 Java POJO.zip
- Stripe API 的 Java 库 .zip
- RxJava 2 和 Retrofit 结合使用的几个最常见的使用方式举例.zip
- RxJava 2 Android 示例 - 如何在 Android 中使用 RxJava 2.zip
- 上传OpenCV开发资源OpenCv开发资源
- Spring Boot与Vue 3前后端分离技术详解及应用