热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

Oracle包和REFCURSOR-mysql教程

首先,需要重新整理一下相关概念,oracle数据库中函数的作用,是只能被别人调用,存储过程可以单独执行,并且可以调用存储过程,

首先,需要重新整理一下相关概念,oracle数据库中函数的作用,是只能被别人调用,存储过程可以单独执行,并且可以调用存储过程,

首先,需要重新整理一下相关概念,Oracle数据库中函数的作用,是只能被别人调用,存储过程可以单独执行,并且可以调用存储过程,而包的作用包可以将任何出现在块声明的语句 ( 过程 , 函数 , 游标 , 游标 , 类型 , 变量 ) 放于包中 , 相当于一个容器 . 将声明语句放入包中的好处是 : 用户可以从其他 PL/SQL 块中对其进行引用 , 因此包为 PL/SQL 提供了全局变量,包分为包头和包体,包头先编译通过后才能编译包体。

包头的创建:

1) 包头 :
语法格式 :
CREATE OR REPLACE PACKAGE package_name /* 包头名称 */
IS|AS
pl/sql_package_spec /* 定义过程 , 函数以及返回类型 , 变量 , 常量及数据类型定义 */
定义包头应当遵循以下原则 :
1) 包元素位置可以任意安排 . 然而在声明部分 , 对象必须在引用前进行声明 .
2) 包头可以不对任何类型的元素进行说明 . 例如 , 包头可以只带过程和函数说明语句 , 而不声明任何异常和类型 .
3) 对过程和函数的任何声明都必须只对子程序和其参数进行描述 , 不能有任何代码的说明 , 代码的实现只能在包体中出现 . 它不同于块声明 , 在块声明中 , 过程和函数的代码可同时出现在声明部分 .
2. 包体 :
语法格式 :
CREATE OR REPLACE PACKAGE BODY package_name/* 包名必须与包头的包名一致 */
IS | AS
pl/sql_package_body /* 游标 , 函数 , 过程的具体定义 */
包体是与包头相互独立的 , 包体只能在包头完成编译后才能进行编译 . 包体中带有包头中描述的子程序的具体实现的代码段 . 除此之外 , 包体还可以包括具有包体人全句属性的附加声明部分 , 但这些附加声明对于包头是不见的 .
Demo:
****************
*包
****************
create or replace package mypack
as
type mytype is ref cursor return emp%rowtype; --声明REF游标
function myemp(dno number) return mytype;
end;
****************
*body
****************
create or replace package body mypack
as
function myemp(dno number) return mytype
as
eee mytype;--声明Ref 游标类型变量
begin
open eee for select * from emp where deptno=dno;
return eee;
end myemp;
end mypack;
分析:
在包头中出现了type mytype is ref cursor return emp%rowtype;
里面有一个REF CURSOR的概念, REF游标就是动态关联结果集的临时对象。即在运行的时候动态决定执行查询,他的主要作用就是实现在程序间传递结果集的功能
①声明REF游标
⑴强类型REF游标:指定retrun type,REF 游标变量的类型必须和return type一致。
语法:Type REF游标名 IS ref cursor Return 结果集返回记录类型;
⑵弱类型REF游标:不指定return type,,能和任何类型的CURSOR变量匹配,用于获取任何结果集。
语法:Type REF游标名 IS ref cursor ;
②声明Ref 游标类型变量;
语法:变量名 已声明Ref 游标类型; ③打开REF游标,关联结果集 ;
语法:Open Ref 游标类型变量 For 查询语句返回结果集; ④获取记录,操作记录;
语法:fetch REF游标名 InTo 临时记录类型变量或属性类型变量列表; ⑤关闭游标,完全释放资源;
语法:Close REF游标名;
附上测试代码:
create or replace package mypack
as
type mytype is ref cursor return emp%rowtype;
function myemp(dno number) return mytype;
end;
create or replace package body mypack
as
function myemp(dno number) return mytype
as
eee mytype;
begin
open eee for select * from emp where deptno=dno;
return eee;
end myemp;
end mypack;
drop table emp;
create table emp
(
DEPTNO number,
COMM number,
SAL number
);
Delete from emp Where deptno=10;
Delete from emp Where deptno=11;
Insert Into emp (deptno,comm,sal) Values (10,1,2);
Insert Into emp (deptno,comm,sal) Values (11,2,3);
Commit;

linux

推荐阅读
  • 本文深入探讨了视图坐标与事件分发机制,详细分析了 `dispatchTouchEvent(MotionEvent event)` 和 `onTouchEvent(MotionEvent event)` 方法中 `event.getX()` 和 `event.getY()` 的具体作用及其在不同视图层级中的传递过程。通过实例解析,阐明了事件从触摸屏到具体视图组件的分发流程,帮助开发者更好地理解和优化用户交互体验。此外,文章还讨论了常见的事件分发问题及解决方案,为实际开发提供了宝贵的参考。 ... [详细]
  • 本文深入探讨了 AdoDataSet RecordSet 的序列化与反序列化技术,详细解析了将 RecordSet 转换为 XML 格式的方法。通过使用 Variant 类型变量和 TStringStream 流对象,实现数据集的高效转换与存储。该方法不仅提高了数据传输的灵活性,还增强了数据处理的兼容性和可扩展性。 ... [详细]
  • 本文将深入探讨MySQL存储引擎的特性及其选择策略。在MySQL 5.1之前的版本中,存储引擎必须与MySQL一同编译和安装。自5.1版本起,存储引擎通过插件化接口实现,显著提升了灵活性和扩展性。文中详细分析了不同存储引擎的特点,如InnoDB、MyISAM等,并提供了针对具体应用场景的优化建议,帮助读者更好地理解和选择适合的存储引擎,以提升数据库的整体性能。 ... [详细]
  • MySQL 数据库连接池优化及高效大批量数据插入策略
    本文探讨了 MySQL 数据库连接池的优化方法及高效大批量数据插入策略。首先,通过合理配置数据库连接池,提高连接效率。接着,利用线程池技术进行并发处理,进一步提升性能。最后,通过批处理方式批量插入数据,减少 I/O 操作,确保数据写入的高效性和稳定性。此外,还介绍了具体的配置参数和优化技巧,以帮助开发者在实际应用中实现更好的性能表现。 ... [详细]
  • 在处理MySQL递归查询父子节点时,若遇到“此函数未声明为DETERMINISTIC、NOSQL或READS SQL DATA”的错误,可以通过以下方法解决:首先,确保表结构正确设计,包含必要的字段用于存储节点关系。接着,创建两个函数,一个用于根据输入ID查询所有子节点及其ID,另一个用于根据输入ID查询所有父节点及其ID。在创建函数时,需明确声明函数的特性,如是否确定性、是否访问SQL数据等,以避免上述错误。调用这些函数时,确保传递正确的参数,并检查返回结果的完整性。 ... [详细]
  • 本文将深入探讨MySQL与MongoDB在游戏账户服务中的应用特点及优劣。通过对比这两种数据库的性能、扩展性和数据一致性,结合实际案例,帮助开发者更好地选择适合游戏账户服务的数据库方案。同时,文章还将介绍如何利用Erlang语言进行高效的游戏服务器开发,提升系统的稳定性和并发处理能力。 ... [详细]
  • 触发器是数据库中一种特殊类型的存储过程,其执行依赖于预定义的事件,而非直接调用。在数据库管理中,触发器主要用于实现数据完整性、自动化日志记录及复杂业务规则的执行。当对数据库中的表、视图等对象进行插入、更新或删除操作时,系统将自动激活相关的触发器,以确保数据的一致性和安全性。此外,通过合理设计和优化触发器,还可以显著提升数据库性能和响应速度。 ... [详细]
  • MySQL 8.0 中的二进制日志格式详细解析及其官方文档参考。本文介绍了MySQL服务器如何使用不同的日志记录格式来记录二进制日志,包括早期版本中基于SQL语句的复制机制(即基于语句的日志记录)。此外,还探讨了其他日志记录方式,如基于行的日志记录和混合日志记录模式,并提供了配置和管理这些日志格式的最佳实践。 ... [详细]
  • 亚马逊老板杰夫·贝佐斯
    本文主要介绍关于的知识点,对【亚马逊创始人或成地球首位万亿富豪,起底贝佐斯创业之路】和【亚马逊老板杰夫·贝佐斯】有兴趣的朋友可以看下由【CSDN资讯】投稿的技术文章,希望该技术和经验能帮到你解决你所遇 ... [详细]
  • sh cca175problem03evolveavroschema.sh ... [详细]
  • 深入解析MySQL Replication中的并行复制机制与实例应用【MySQL进阶教程】
    本文深入探讨了MySQL 5.6版本后引入的并行复制机制,详细解析了其工作原理及优化效果。通过具体实例,展示了如何在实际环境中配置和使用并行复制,以提高数据同步效率和系统性能。 ... [详细]
  • 本文深入解析了 Python 爬虫技术在 B 站数据挖掘中的应用,通过分析海量用户行为和内容数据,揭示了热门 UP 主成功的背后因素。Python 作为一种强大的编程语言,其面向对象和解释执行的特点使其成为数据抓取和处理的理想选择。文章详细介绍了如何利用 Python 爬虫技术获取 B 站的数据,并通过数据分析方法,探讨了热门 UP 主的创作策略和互动模式,为内容创作者提供了有价值的参考。 ... [详细]
  • 点击上方蓝色“程序猿DD”,选择“设为星标”回复“资源”获取独家整理的学习资料!来源|https:github.comwizardbyronprinci ... [详细]
  • 本文探讨了在 SQL 中将中文字符转换为拼音首字母的有效方法和技巧。通过使用特定的函数和算法,可以实现中文名称的快速拼音首字母提取,从而提高数据处理的效率和准确性。文中还提供了具体的示例和代码片段,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 在 Asp.net 应用中,动态加载 DropDownList 控件的数据源是一项常见需求。本文探讨了如何高效地从数据库中获取数据,并实时更新下拉列表,确保用户界面始终与后台数据保持同步。通过使用 ADO.NET 和 LINQ to SQL 技术,开发者可以轻松实现这一功能,同时提高应用的性能和用户体验。文中还提供了代码示例和最佳实践,帮助开发者解决常见的数据绑定问题。 ... [详细]
author-avatar
xao
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有