-----------------------------------------  建表  ------------------------------------------

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存储过程学习之路(一)的更多相关文章

  1. orcale存储过程学习之路--存储过程实例(三)

    --创建表 create table TESTTABLE(  id1  VARCHAR2(12),  name VARCHAR2(32))select t.id1,t.name from TESTTA ...

  2. orcale存储过程学习之路--创建空存储过程(二)

    --创建表 create table TESTTABLE(  id1  VARCHAR2(12),  name VARCHAR2(32))select t.id1,t.name from TESTTA ...

  3. Jfinal调用Orcale存储过程

    因为项目需要,最近一直在学习Orcale存储过程,但发现在网上很少有人写Jave中Jfinal调用Orcale存储过程的文章,即使有也是几年前的,很多都不能用,今天给大家分享一段Jfinal调用Orc ...

  4. 微软企业库5.0 学习之路——第四步、使用缓存提高网站的性能(EntLib Caching)

    首先先补习下企业库的Caching Application Block的相关知识: 1.四大缓存方式,在Caching Application Block中,主要提供以下四种保存缓存数据的途径,分别是 ...

  5. <2014 05 09> Lucida:我的算法学习之路

    [转载] 我的算法学习之路 关于 严格来说,本文题目应该是我的数据结构和算法学习之路,但这个写法实在太绕口——况且CS中的算法往往暗指数据结构和算法(例如算法导论指的实际上是数据结构和算法导论),所以 ...

  6. 初级dba学习之路参考

    今天周一拖着疲惫的身躯 11点才离开公司,回到家估计写完这篇博客就要17号了. 一个人走在回家的路上,很黑,突然很多感触,一个人在北京拼搏,不敢停止学习的脚步,因为只要停下来就会感觉到孤独. 回顾一下 ...

  7. jQuery学习之路(1)-选择器

    ▓▓▓▓▓▓ 大致介绍 终于开始了我的jQuery学习之路!感觉不能再拖了,要边学习原生JavaScript边学习jQuery jQuery是什么? jQuery是一个快速.简洁的JavaScript ...

  8. Android开发学习之路-RecyclerView滑动删除和拖动排序

    Android开发学习之路-RecyclerView使用初探 Android开发学习之路-RecyclerView的Item自定义动画及DefaultItemAnimator源码分析 Android开 ...

  9. RPC远程过程调用学习之路(一):用最原始代码还原PRC框架

    RPC: Remote Procedure Call 远程过程调用,即业务的具体实现不是在自己系统中,需要从其他系统中进行调用实现,所以在系统间进行数据交互时经常使用. rpc的实现方式有很多,可以通 ...

随机推荐

  1. Ucloud的自主研发的检测主机是否被入侵的agent

    wget --timeout 3 -t 2 http://download.uhostsec.service.ucloud.cn:8090/ucloud-secagent-install.sh -O ...

  2. php分享十一:PHP实现异步调用方法研究

    浏览器和服务器之间是通过 HTTP 协议进行连接通讯的.这是一种基于请求和响应模型的协议.浏览器通过 URL 向服务器发起请求,Web 服务器接收到请求,执行一段程序,然后做出响应,发送相应的html ...

  3. NSDate NSTimerZone 时区转换

    timeZoneAbbreviation = @“America/New_York”: #pragma mark - 转换时区 - (NSDate *) convertDate:(NSDate *) ...

  4. Windows平台JDK安装

    原文链接:http://android.eoe.cn/topic/android_sdk 下载Java的开发包JDK JDK有好几个类型版本,我们只需要选择Java SE类型的版本就行了.进入网页:h ...

  5. 牛腩学用MUI做手机APP

    斗鱼直播间直播学习撸码,最终目标是用MUI做一个手机APP(暂定android平台,攒钱买IPHONE 7SE!!!),直播内容含整个软件APP的制作过程(含后台接口的制作,放到自己买的阿里云服务器, ...

  6. 2.1 Apache Axis2 快速学习手册之 POJO 构建Web Service

    1. 准备:创建一个Maven Web App 项目 这里让我们使用Maven 模板创建一个Web App 项目 1. New------> Maven Project 2. 使用默认配置,点击 ...

  7. SQL作业

    USE [test] GO /****** Object: StoredProcedure [dbo].[wangchuang] Script Date: 2016/8/25 14:09:24 *** ...

  8. [Windows Azure] Manage the Availability of Virtual Machines

    Manage the Availability of Virtual Machines You can ensure the availability of your application by u ...

  9. tornado设置settings

    1.作用 设置应用程序相关参数 2.用法 settings = dict() settings["debug"] = True tornado.web.Application.__ ...

  10. HBase写入性能改造(续)--MemStore、flush、compact参数调优及压缩卡的使用【转】

    首先续上篇测试:   经过上一篇文章中对代码及参数的修改,Hbase的写入性能在不开Hlog的情况下从3~4万提高到了11万左右. 本篇主要介绍参数调整的方法,在HDFS上加上压缩卡,最后能达到的写入 ...