简化返回数据集的存储过程例子plsql调用

本文提供了一个使用PL/SQL创建过程并利用游标遍历查询结果的具体示例。通过定义一个过程来打开游标并读取数据库表med_users中的所有记录,展示了如何逐一处理每条数据。

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


create or replace procedure getcur(p_rc out SYS_REFCURSOR)  
is 
begin 
open p_rc for 'select * from med_users';  
end getcur;


declare
 med_userss SYS_REFCURSOR;
 v_row acs.med_users%ROWTYPE;
begin 
getcur(med_userss);  
loop
FETCH  med_userss into v_row;
EXIT WHEN med_userss%NOTFOUND;
dbms_output.put_line(v_row.login_name);  
end loop;  
end; 

作者: 王德田 发表于 2011-03-07 18:54 原文链接

评论: 0 查看评论 发表评论


最新新闻:
· 疑似中国黑客入侵澳大利亚议会计算机系统(2011-03-29 12:05)
· 苹果开发者大会1599美元天价门票抢购一空(2011-03-29 12:04)
· 乐淘网CEO毕胜:今年近七成广告预算投向搜索(2011-03-29 11:58)
· Facebook聘请时代华纳高管提升广告服务(2011-03-29 11:57)
· “万能胶之父”逝世 曾被奥巴马颁科技奖(2011-03-29 11:56)

编辑推荐:Java之父詹姆斯·高斯林加盟Google

网站导航:博客园首页  我的园子  新闻  闪存  小组  博问  知识库

### 数据库中的存储过程与函数 #### 存储过程的特点及使用场景 存储过程是一组预编译的SQL语句集合,在数据库中作为一个单元保存。这使得执行频繁的任务更加高效,因为它们不需要每次都重新解析和优化。 对于 **SQL Server**, 创建存储过程可以通过 `CREATE PROCEDURE` 命令完成[^1]: ```sql CREATE PROCEDURE sp_example @param INT AS BEGIN SELECT * FROM table_name WHERE column = @param; END; ``` 在 **MySQL** 中同样可以定义类似的结构: ```sql DELIMITER // CREATE PROCEDURE proc_example(IN param INT) BEGIN SELECT * FROM table_name WHERE id = param; END// DELIMITER ; ``` 而对于 **Oracle**, 则会采用PL/SQL语法编写存储过程: ```plsql CREATE OR REPLACE PROCEDURE procedure_name (p_param IN NUMBER) IS BEGIN DBMS_OUTPUT.PUT_LINE('Parameter value is ' || p_param); END; / ``` 这些例子展示了如何根据不同类型的数据库创建基本的存储过程。由于存储过程中可包含复杂的逻辑控制流(如循环、条件判断),非常适合用于实现业务规则或数据维护任务。 #### 函数的特点及其应用场景 不同于存储过程的是,函数主要用于计算并返回单个值给调用者。这意味着如果需要在一个查询表达式内部获取某些特定的结果,则应该考虑使用函数而不是存储过程。 以下是三种不同数据库环境下定义简单加法函数的方式: - 对于 **SQL Server** : ```sql CREATE FUNCTION fn_add (@a int, @b int) RETURNS int AS BEGIN RETURN(@a + @b) END; ``` - 在 **MySQL** 下面这样写: ```sql DELIMITER $$ CREATE FUNCTION add_function(a INT, b INT) RETURNS INT DETERMINISTIC BEGIN DECLARE result INT; SET result = a + b; RETURN(result); END$$ DELIMITER ; ``` - 而针对 **Oracle** , 可以这样做: ```plsql CREATE OR REPLACE FUNCTION function_add(p_a number,p_b number) RETURN number IS v_result number(8):=0; BEGIN v_result := p_a+p_b; RETURN(v_result); END; / ``` 通过上述代码片段可以看出,虽然每种数据库的具体语法有所差异,但是核心概念保持一致——即接收输入参数并通过某种方式得出最终结果作为输出传递回去。 #### 主要区别总结 | 特征 | 存储过程 | 函数 | | -- | --- | | 返回值数量 | 多个记录集或多行数据 | 单一标量值 | | 是否允许修改表状态 | 是 | 否 (取决于具体环境设置)| | 执行上下文 | 自身独立运行 | 需要在SELECT或其他DML语句内被调用 | 综上所述,当涉及到较为复杂的数据操作流程时应优先选用存储过程;而在需要简化查询表达式的场合下则更适合应用自定义函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值