一个oracle存储过程
打开plsql,在packages文件夹里新建存储过程
在sql窗口中运行如下语句
create or replace package SY_USER_PKG1 is
TYPE MYCURSOR IS REF CURSOR;
--自己写的测试存储过程
PROCEDURE T_CHCODE1
(
v_phone IN VARCHAR2,
v_userType IN NUMBER,
v_type IN NUMBER,
v_err_code OUT NUMBER
);
end SY_USER_PKG1;
则会在packages文件夹下出现这个存储过程标记,就相当于java中的一个接口吧!
然后:再写具体的存储过程,就相当于java中的接口实现类吧
create or replace package body SY_USER_PKG1 is
PROCEDURE T_CHCODE1
(
v_phone IN VARCHAR2,
v_userType IN NUMBER,
v_type IN NUMBER,
v_err_code OUT NUMBER
)
IS
v_userCount NUMBER;
BEGIN
IF v_type=1 THEN
SELECT COUNT(1) INTO v_userCount FROM t_user_register_info A WHERE A.ACCOUNT=v_phone and a.user_type_id=v_userType;
IF v_userCount=1 THEN
v_err_code:=1;
else
v_err_code:=0;
END IF;
end if;
IF v_type=2 THEN
SELECT COUNT(1) INTO v_userCount FROM t_user_register_info A WHERE A.ACCOUNT=v_phone and a.user_type_id=v_userType;
IF v_userCount=0 THEN
v_err_code:=2;
else
v_err_code:=0;
END IF;
END IF;
end T_CHCODE1;
end SY_USER_PKG1;
这段代码按F8运行后,在packages bodyies文件夹下会出现这个
这就是一个完整的存储过程了,有接口,有实现
下面让我们来测试一下
点击右键,会有测试选项
填入参数,如上图,F8运行,结果如下图
可以看到拿到了返回的结果值 0
然后就可以在java代码中调用了,在mapper配置文件中是这样的:
<insert id="chcode" parameterType="java.util.Map" statementType="CALLABLE">
<![CDATA[
{call SY_USER_PKG1.T_CHCODE1(
#{v_phone,mode=IN,jdbcType=NVARCHAR},
#{v_userType,mode=IN,jdbcType=NUMERIC},
#{v_type,mode=IN,jdbcType=NUMERIC},
#{v_err_code,mode=OUT,jdbcType=NUMERIC}
)
}
]]>
</insert>
在service实现类中直接调用
oCode就是拿到的返回值了。
至此,一个调用存储过程的流程结束了!
一个oracle存储过程的更多相关文章
- 记一个Oracle存储过程错误
下面一个存储过程是创建一个job,在5秒后更新一个表: create or replace PROCEDURE P_TEST AS jobno number; BEGIN dbms_job.submi ...
- 测试第一个Oracle存储过程
存储过程语句 //简单存储过程的例子 //每调用一次打印一次hello world create or replace procedure sayhelloworld as begin dbms_ou ...
- 写的一个ORACLE存储过程小练习
CREATE OR REPLACE PROCEDURE PRO_1112(O_NOTE OUT NUMBER,O_RESULT OUT VARCHAR2)ASV_NO NUMBER(20);V_NOT ...
- 项目中oracle存储过程记录——经常使用语法备忘
项目中oracle存储过程记录--经常使用语法备忘 项目中须要写一个oracle存储过程,需求是收集一个复杂查询的内容(涉及到多张表),然后把符合条件的记录插入到目标表中.当中原表之中的一个的日期字段 ...
- .NET Core中使用Dapper操作Oracle存储过程最佳实践
为什么说是最佳实践呢?因为在实际开发中踩坑了,而且发现网上大多数文章给出的解决方法都不能很好地解决问题.尤其是在获取类型为OracleDbType.RefCursor,输出为:ParameterDir ...
- NET Core中使用Dapper操作Oracle存储过程
.NET Core中使用Dapper操作Oracle存储过程最佳实践 为什么说是最佳实践呢?因为在实际开发中踩坑了,而且发现网上大多数文章给出的解决方法都不能很好地解决问题.尤其是在获取类型为Or ...
- JDBC调用oracle 存储过程
1.创建一个oracle存储过程 p_empInfo2 并执行,使这段sql代码能编译存储到oracle数据库中. --输入员工号查询某个员工(7839)信息,将薪水作为返回值输出,给调用的程序使用 ...
- Oracle 存储过程调用返回游标的另一个存储过程。
一个扩展存储过程调用另一个存储过程,示例: 被调用存储过程:最后会返回一个游标,游标返回一个值.调用这个存储过程的存储过程同样需要获取它. procedure SearchBill --根据到货单号查 ...
- oracle 存储过程
来自:http://www.jb51.net/article/31805.htm Oracle存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 I ...
随机推荐
- Qt源码分析之信号和槽机制
Qt的信号和槽机制是Qt的一大特点,实际上这是和MFC中的消息映射机制相似的东西,要完成的事情也差不多,就是发送一个消息然后让其它窗口响应,当然,这里的消息是广义的说法,简单点说就是如何在一个类的一个 ...
- AcitonBar 自定义布局
Android系统中ActionBar默认的布局不美观且难于控制,通过为ActionBar自定义布局的方式可以灵活控制ActionBar. 自定义Activity主题和ActionBar样式 在新建的 ...
- BZOJ3397: [Usaco2009 Feb]Surround the Islands 环岛篱笆
3397: [Usaco2009 Feb]Surround the Islands 环岛篱笆 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 11 So ...
- HDU5140---Hun Gui Wei Company (主席树)
主席树太强大了,,如果仅仅用来求第k大就太屈才了..貌似和HDU4605差不多,那个是在图上根据点的顺序建立主席树,这个是根据年龄大小 或者等级高低建立主席树. 题意 大致就是一个二维区间的求和,但是 ...
- Cplus
1,factorials[i] = i * factorials[i - 1]; #include <iostream>using namespace std; const int ArS ...
- arrayPointer
1,分别使用指针加减 int wages[2] = {100000000,20000000}; int *pw = wages or int *pw = &wages[0] 表示指针指向数组的 ...
- Oracle 表分析
ANALYZE TABLE SeikyuTbl COMPUTE Statistics FOR TABLE FOR ALL COLUMNS FOR ALL INDEXES ; 一.优化器的优化方式 Or ...
- Myeclipse自动生成javabean的get和set方法
用Myeclipse开发java web程序,写javabean的时候,如果字段很多的话,写get和set方法是一件很无语和浪费时间的事情,所以Myeclipse提供了一个自动生成这些方法的功能. 首 ...
- if(!!attr)是什么鬼???
看到很多代码if(!!attr),为什么不直接写if(attr):其实这是一种更严谨的写法:请测试 typeof 5和typeof !!5的区别.!!的作用是把一个其他类型的变量转成的bool类型.
- h5新特性
!DOCTYPE html><html> <head> <meta charset="utf-8"> <title></ ...