Oracle简单学习
最近一段时间重温了oracle关于存储过程和oracle包以及function中的定义, 先看一下要用的表:
devices(id number, name varchar2, age number)
groups(id number, devicesid number, name varchar2, content varchar2)
在oracle中建立如下的package和package bodies,
下面给出里面具体的内容:
首先是packges下面的devices_pkg内容:
定义三个function和一个procedure
CREATE OR REPLACE PACKAGE DEVICES_PKG IS TYPE MY_RESULTSET_CURSOR IS REF CURSOR; FUNCTION fun_add_device( dev_id NUMBER, dev_name VARCHAR2, dev_age NUMBER) RETURN NUMBER; FUNCTION fun_delete_device(dev_id NUMBER) RETURN NUMBER; FUNCTION fun_Get_Test_Main_All RETURN MY_RESULTSET_CURSOR; PROCEDURE pro_select_device(dev_id NUMBER, RS out MY_RESULTSET_CURSOR); END DEVICES_PKG;
然后是packages bodies里面的内容:
这里面主要是对上面定义的function和procedure的实现定义,
有简单的返回, 还有游标类型的返回;
CREATE OR REPLACE PACKAGE BODY DEVICES_PKG AS FUNCTION fun_add_device(dev_id NUMBER, dev_name VARCHAR2, dev_age NUMBER) RETURN NUMBER IS BEGIN INSERT INTO devices VALUES (dev_id, dev_name, dev_age); IF SQL%FOUND THEN RETURN 1; ELSE RETURN 0; END IF; END fun_add_device; FUNCTION fun_delete_device(dev_id NUMBER) RETURN NUMBER IS BEGIN DELETE FROM devices WHERE id = dev_id; IF SQL%FOUND THEN RETURN 1; ELSE RETURN 0; END IF; END fun_delete_device; FUNCTION fun_Get_Test_Main_All RETURN MY_RESULTSET_CURSOR IS return_cursor MY_RESULTSET_CURSOR; BEGIN OPEN return_cursor FOR 'SELECT d.id,d.name,d.age FROM devices d ORDER BY d.id ASC'; RETURN return_cursor; END; PROCEDURE pro_select_device(dev_id NUMBER, RS out MY_RESULTSET_CURSOR) IS testCursor MY_RESULTSET_CURSOR; testRec devices%ROWTYPE; v_sql_select VARCHAR2(500); BEGIN v_sql_select := 'select d.name, d.age, g.content from devices d, groups g where d.id ='|| dev_id || ' and d.id = g.devicesid'; OPEN RS FOR v_sql_select; testCursor := fun_Get_Test_Main_All(); LOOP FETCH testCursor INTO testRec; EXIT WHEN testCursor%NOTFOUND; DBMS_OUTPUT.put_line('id:'||testRec.Id||',name:'||testRec.Name||',age:'||testRec.Age); END LOOP; END; END DEVICES_PKG;
这里给出其中一个调用的过程:
测试devices_pkg.pro_select_device这个存储过程,
输入dev_id为3,
结果rs为:
然后看一下DBMS输出是什么:
努力做一个伪程序员, 不管道路有多么的艰苦......
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!
2018-11-10 表单验证<AngularJs>