SQL包类—01—介绍与使用
DMSQL中的包也好,类也罢,都是类似java中的类的概念。
只是,DMSQL中的包是面向过程的,没有继承的概念。
DMSQL中的类是面向对象的,和java中的类相似都有继承的概念。
我们前面学的存储过程/函数,现在可以通过一个包全部把他们都集合在一个包里,并且在这个包里还可以定义所有存储过程/函数会用到的全局变量。
就像是java中的一个类集合了所有的方法与成员变量。
包的创建主要是包规范+包体。
create or replace package "SYSDBA"."package_1" as a int default 1; b varchar := 'bbb'; rownumber int := 0; function func_incre(c in int, d in int) return int; end package_1; create or replace package body "SYSDBA"."package_1" as function func_incre(c in int, d in int) return int as declare e int default 1; begin e := c+d+e; return e; end func_incre; begin select count(rownum) into rownumber from test ; end package_1; alter package "SYSDBA"."package_1" compile; call "package_1".func_incre(1,1);
看个错误实例:
原因:
1、无法解析的成员表达式表示找不到成员也就是找不到包或者函数;首先我的数据库是大小写敏感的,package_1加了双引号,是小写,而我在call package_1,funcincre()都没有+双引号,所以会被编译器自动转化为大写,所以找不到包和类,所以数据库提示:无法解析的成员表达式。
2、存储函数中不能包含查询,也就是说select * from test是错误的,虽然编译时不会有问题,但是执行时会提示错误。
但是在上文中,使用select count(rownum) into rownumber from test;就不会报错,为什么?因为这个sql不是查询,而是赋值。
不过,函数虽然不可以用查询sql,但是存储过程可以有,因为函数要有一个返回值,而存储过程没有。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!