orcale存储过程学习之路(一)
----------------------------------------- 建表 ------------------------------------------
create table test_user
(
id VARCHAR2(12),
name VARCHAR2(32),
age number(2)
)
select t.id,t.name,t.age from test_user t
insert into test_user (ID, NAME,age)
values ('1', '张三',12);
insert into test_user (ID, NAME,age)
values ('2', '李四',12);
insert into test_user (ID, NAME,age)
values ('3', '王五',12);
insert into test_user (ID, NAME,age)
values ('4', '赵六',21);
insert into test_user (ID, NAME,age)
values ('5', '田七',21);
----------------------------------------- 存储过程 ------------------------------------------
1.在packages文件夹下新建一个“包”,当新建时会同时出现两个供编辑的面板:一个为“声明”的,一个为“body”部分的。
2.编写两个空方法:
----------------------------------------- 声明部分 ------------------------------------------
create or replace package Pro_Test_User is
PROCEDURE Ins_Test_User(I_ID IN VARCHAR2,I_NAME IN VARCHAR2,I_AGE IN VARCHAR2,O_RET_CODE OUT NUMBER,O_RET_MSG OUT VARCHAR2);
PROCEDURE Upd_Test_User(I_ID IN VARCHAR2,I_NAME IN VARCHAR2,I_AGE IN VARCHAR2,O_RET_CODE OUT NUMBER,O_RET_MSG OUT VARCHAR2);
PROCEDURE Del_Test_User(I_ID IN VARCHAR2,O_RET_CODE OUT NUMBER,O_RET_MSG OUT VARCHAR2);
PROCEDURE Que_Test_User(I_ID IN VARCHAR2,I_NAME IN VARCHAR2,I_AGE IN VARCHAR2,O_RET_CODE OUT NUMBER,O_RET_MSG OUT VARCHAR2,O_RET_LIST OUT SYS_REFCURSOR);
PROCEDURE Que_Page_Test_User(I_ID IN VARCHAR2,I_NAME IN VARCHAR2,I_AGE IN VARCHAR2,I_PAGE_SIZE IN NUMBER,I_PAGE_NUM IN NUMBER,O_RET_CODE OUT NUMBER,O_RET_MSG OUT VARCHAR2,O_RET_TOTNUM OUT NUMBER,O_RET_LIST OUT SYS_REFCURSOR);
end Pro_Test_User;
----------------------------------------- BODY部分 ------------------------------------------
create or replace package body Pro_Test_User is
PROCEDURE Ins_Test_User(I_ID IN VARCHAR2,
I_NAME IN VARCHAR2,
I_AGE IN VARCHAR2,
O_RET_CODE OUT NUMBER,
O_RET_MSG OUT VARCHAR2)IS
BEGIN
O_RET_CODE:=0;
O_RET_MSG:='初始化默认成功';
IF I_ID IS NOT NULL AND I_NAME IS NOT NULL AND I_AGE IS NOT NULL THEN
INSERT INTO Test_User(ID,NAME,AGE) VALUES (I_ID,I_NAME,I_AGE);
COMMIT;
O_RET_CODE:=0;
O_RET_MSG:='操作成功';
ELSE
O_RET_CODE:=1;
O_RET_MSG:='没有ID|姓名|年龄';
END IF;
EXCEPTION
WHEN OTHERS THEN
O_RET_CODE:=-1;
O_RET_MSG:='sql执行过程出错啦!';
END Ins_Test_User;
PROCEDURE Upd_Test_User(I_ID IN VARCHAR2,
I_NAME IN VARCHAR2,
I_AGE IN VARCHAR2,
O_RET_CODE OUT NUMBER,
O_RET_MSG OUT VARCHAR2)IS
BEGIN
O_RET_CODE:=0;
O_RET_MSG:='初始化默认成功';
IF I_ID IS NOT NULL THEN
UPDATE Test_User SET NAME=I_NAME,
AGE =I_AGE
WHERE ID= I_ID;
COMMIT;
O_RET_CODE:=0;
O_RET_MSG:='操作成功';
ELSE
O_RET_CODE:=1;
O_RET_MSG:='没有ID';
END IF;
EXCEPTION
WHEN OTHERS THEN
O_RET_CODE:=-1;
O_RET_MSG:='sql执行过程出错啦!';
END Upd_Test_User;
PROCEDURE Del_Test_User(I_ID IN VARCHAR2,
O_RET_CODE OUT NUMBER,
O_RET_MSG OUT VARCHAR2)IS
BEGIN
NULL;
END Del_Test_User;
PROCEDURE Que_Test_User(I_ID IN VARCHAR2,
I_NAME IN VARCHAR2,
I_AGE IN VARCHAR2,
O_RET_CODE OUT NUMBER,
O_RET_MSG OUT VARCHAR2,
O_RET_LIST OUT SYS_REFCURSOR)IS
T_SQL VARCHAR2(200):='';
U Test_User%rowtype;
BEGIN
NULL;
IF I_NAME IS NOT NULL THEN
T_SQL := T_SQL || 'AND T.NAME = ''' || I_NAME || '''';
END IF;
IF I_AGE IS NOT NULL THEN
T_SQL := I_AGE || 'AND T.AGE = ''' || I_AGE || '''';
END IF;
T_SQL := 'SELECT T.ID,T.NAME,T.AGE FROM Test_User T WHERE 1=1'|| T_SQL ;
OPEN O_RET_LIST FOR T_SQL;
loop
fetch O_RET_LIST into U.id, U.name,U.age;
exit when O_RET_LIST%notfound;
dbms_output.put_line(U.id||'-'||U.name||'-'||U.age);
end loop;
END Que_Test_User;
PROCEDURE Que_Page_Test_User(I_ID IN VARCHAR2,
I_NAME IN VARCHAR2,
I_AGE IN VARCHAR2,
I_PAGE_SIZE IN NUMBER,
I_PAGE_NUM IN NUMBER,
O_RET_CODE OUT NUMBER,
O_RET_MSG OUT VARCHAR2,
O_RET_TOTNUM OUT NUMBER,
O_RET_LIST OUT SYS_REFCURSOR)IS
O_Q_SQL VARCHAR2(200):='';
O_T_SQL VARCHAR2(200):='';
I_PRA VARCHAR2(200):='';
BEGIN_ROW NUMBER :=0;
END_ROW NUMBER :=I_PAGE_SIZE;
BEGIN
O_RET_CODE:=0;
O_RET_MSG:='初始化默认成功';
IF I_PAGE_SIZE IS NOT NULL AND I_PAGE_NUM IS NOT NULL THEN
BEGIN_ROW := (I_PAGE_NUM-1)*I_PAGE_SIZE+1;
END_ROW := I_PAGE_NUM *I_PAGE_SIZE ;
IF I_NAME IS NOT NULL THEN
I_PRA := I_PRA || 'AND T.NAME LIKE ''%' || I_NAME || '%''';
END IF;
IF I_AGE IS NOT NULL THEN
I_PRA := I_PRA || 'AND T.AGE = ''' || I_AGE || '''';
END IF;
O_Q_SQL := 'SELECT T.ID,T.NAME,T.AGE FROM (SELECT ROWNUM RN ,TE.* FROM Test_User TE WHERE ROWNUM <='|| END_ROW ||') T WHERE T.RN >= '|| BEGIN_ROW || I_PRA ;
OPEN O_RET_LIST FOR O_Q_SQL;
O_T_SQL := 'SELECT COUNT(ID) AS TOTNUM FROM Test_User WHERE 1=1'|| I_PRA ;
DBMS_OUTPUT.put_line(O_T_SQL);
O_RET_CODE:=0;
O_RET_MSG:='操作成功';
ELSE
O_RET_CODE:=1;
O_RET_MSG:='没有页码详情';
END IF;
DBMS_OUTPUT.put_line(O_T_SQL);
DBMS_OUTPUT.put_line(O_RET_MSG);
EXCEPTION
WHEN OTHERS THEN
O_RET_CODE:=-1;
O_RET_MSG:='sql执行过程出错啦!';
END Que_Page_Test_User;
end Pro_Test_User;
3.存储语句写完后在执行一个左上角的“设置”按钮。
4.查看packages和package bodies下是否有生成的存储过程
调用(一):
declare
I_ID VARCHAR2(10);
I_NAME VARCHAR2(10);
I_AGE VARCHAR2(10);
O_RET_CODE NUMBER;
O_RET_MSG VARCHAR2(10);
p_ref1 SYS_REFCURSOR;
result_ SYS_REFCURSOR;
begin
Pro_Test_User.Que_Test_User(I_ID,I_NAME,I_AGE,O_RET_CODE,O_RET_MSG,p_ref1);
DBMS_OUTPUT.put_line(O_RET_MSG);
end;
调用(二):
declare
I_ID VARCHAR2(10);
I_NAME VARCHAR2(10);
I_AGE VARCHAR2(10);
O_RET_CODE NUMBER;
O_RET_MSG VARCHAR2(10);
p_ref1 SYS_REFCURSOR;
result_ SYS_REFCURSOR;
begin
Pro_Test_User.Que_Test_User(I_ID,I_NAME,I_AGE,O_RET_CODE,O_RET_MSG,O_RET_LIST=>p_ref1);
loop
fetch p_ref1 into I_ID,I_NAME,I_AGE;
dbms_output.put_line(I_NAME||'------------'||I_AGE);
exit when p_ref1%notfound;
end loop;
end;
调用(三):
declare
v_cursor sys_refcursor;
ret_code NUMBER;
ret_msg VARCHAR2(10);
u Test_User%rowtype;
begin
Pro_Test_User.Que_Test_User(2,'张三','',ret_code,ret_msg,v_cursor);
loop
fetch v_cursor into u.id, u.name,u.age;
exit when v_cursor%notfound;
dbms_output.put_line(u.id||'-'||u.name||'-'||u.age);
end loop;
end;
orcale存储过程学习之路(一)的更多相关文章
- orcale存储过程学习之路--存储过程实例(三)
--创建表 create table TESTTABLE( id1 VARCHAR2(12), name VARCHAR2(32))select t.id1,t.name from TESTTA ...
- orcale存储过程学习之路--创建空存储过程(二)
--创建表 create table TESTTABLE( id1 VARCHAR2(12), name VARCHAR2(32))select t.id1,t.name from TESTTA ...
- Jfinal调用Orcale存储过程
因为项目需要,最近一直在学习Orcale存储过程,但发现在网上很少有人写Jave中Jfinal调用Orcale存储过程的文章,即使有也是几年前的,很多都不能用,今天给大家分享一段Jfinal调用Orc ...
- 微软企业库5.0 学习之路——第四步、使用缓存提高网站的性能(EntLib Caching)
首先先补习下企业库的Caching Application Block的相关知识: 1.四大缓存方式,在Caching Application Block中,主要提供以下四种保存缓存数据的途径,分别是 ...
- <2014 05 09> Lucida:我的算法学习之路
[转载] 我的算法学习之路 关于 严格来说,本文题目应该是我的数据结构和算法学习之路,但这个写法实在太绕口——况且CS中的算法往往暗指数据结构和算法(例如算法导论指的实际上是数据结构和算法导论),所以 ...
- 初级dba学习之路参考
今天周一拖着疲惫的身躯 11点才离开公司,回到家估计写完这篇博客就要17号了. 一个人走在回家的路上,很黑,突然很多感触,一个人在北京拼搏,不敢停止学习的脚步,因为只要停下来就会感觉到孤独. 回顾一下 ...
- jQuery学习之路(1)-选择器
▓▓▓▓▓▓ 大致介绍 终于开始了我的jQuery学习之路!感觉不能再拖了,要边学习原生JavaScript边学习jQuery jQuery是什么? jQuery是一个快速.简洁的JavaScript ...
- Android开发学习之路-RecyclerView滑动删除和拖动排序
Android开发学习之路-RecyclerView使用初探 Android开发学习之路-RecyclerView的Item自定义动画及DefaultItemAnimator源码分析 Android开 ...
- RPC远程过程调用学习之路(一):用最原始代码还原PRC框架
RPC: Remote Procedure Call 远程过程调用,即业务的具体实现不是在自己系统中,需要从其他系统中进行调用实现,所以在系统间进行数据交互时经常使用. rpc的实现方式有很多,可以通 ...
随机推荐
- 在linux中配置环境变量
JDK下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 根据Linux ...
- CSS边框闪烁呼吸样式
<html> <body> <head> .arrow_box{animation: glow 800ms ease-out infinite alternate; ...
- 配置并使用Android支持的库
原文链接:http://android.eoe.cn/topic/android_sdk Android Support Library(支持库)提供了包含一个API库的JAR文件,当你的应用运行在A ...
- 模态推出 全屏 隐藏tabbar
SearchVC * vc = [[SearchVC alloc] init]; /* 底部向上 UIModalTransitionStyleCoverVertical // 淡入 UIMo ...
- VS2010如何重置开发环境
在利用VS进行软件开发的过程中,我们时不时要因为各种原因,对VS的开发环境进行变动,对于很多初次接触VS这样一个十分好用方便的编程工具的人来说,更改编程环境成了一个难题,今天我们就来讲解一下,如何更改 ...
- 【Unity】7.4 游戏外设输入
分类:Unity.C#.VS2015 创建日期:2016-04-21 一.简介 Unity可以处理摇杆.游戏手柄.方向盘等标准游戏外设的输入,使用的方法如下图所示: 虚拟按键需要在输入管理器中配置,把 ...
- vue-cli 工程中引入jquery
在vue-cli 生成的工程中引入了jquery,记录一下.(模板用的webpack) 首先在package.json里的dependencies加入"jquery" : &quo ...
- Enum,Int,String的互相转换 枚举转换
Enum为枚举提供基类,其基础类型可以是除 Char 外的任何整型.如果没有显式声明基础类型,则使用 Int32.编程语言通常提供语法来声明由一组已命名的常数和它们的值组成的枚举. 注意:枚举类型的基 ...
- query compiler
https://db.in.tum.de/teaching/ws1415/queryopt/chapter3.pdf?lang=de pi3.informatik.uni-mannheim.de/~m ...
- Hash(MD5校验工具)
本站提供md5校验工具下载.Hash(md5校验工具)是一款小巧好用的哈希计算器,Hash支持文件拖放,速度很快,可以计算文件的MD5.SHA1.CRC32 的值.在论坛上.软件发布时经常用Hash ...