oracle怎么定义参数,什么是oracle初始化参数

JAVA调用存储过程,Oracle自定义类型作参数怎么写法

1. 存储过程以及类型定义如下:

成都创新互联专注于网站建设|成都网站维护|优化|托管以及网络推广,积累了大量的网站设计与制作经验,为许多企业提供了网站定制设计服务,案例作品覆盖成都三维植被网等行业。能根据企业所处的行业与销售的产品,结合品牌形象的塑造,量身设计品质网站。

--The array in oracle

CREATE OR REPLACE TYPE idArray AS TABLE OF VARCHAR2(20);

--package header

CREATE OR REPLACE PACKAGE Lib_Package AS

PROCEDURE Book_Check_Procedure(ids IN idArray, exist OUT NUMBER);

END Lib_Package;

--package body

CREATE OR REPLACE PACKAGE BODY Lib_Package AS

PROCEDURE Book_Check_Procedure( ids IN idArray, exist OUT NUMBER) AS v_Index BINARY_INTEGER; BEGIN v_Index:= ids.FIRST; LOOP SELECT COUNT(*) INTO exist FROM Lib_Duplicate WHERE status='Lent' AND book_id=ids(v_Index); EXIT WHEN v_Index=ids.LAST OR exist0; v_Index:= ids.NEXT(v_Index); END LOOP;END Book_Check_Procedure;

END Lib_Package;

2.在Java中调用上面的存储过程

(1) 在Oracle中定义数组类型idArray (2) 在java构造数组并转换成Oracle中定义的数组类型,调用存储过程

/** * 当要删除图书时,检查是否仍然有图书复本处于借出状态 */ public boolean checkBookStatus(String[] bookIds) throws DataAccessException {

boolean flag = false; Connection conn = null; OracleCallableStatement cstmt = null; ArrayDescriptor desc = null; ARRAY bookIdArray = null; int count = 0; String sql = "{call LIB_PACKAGE.Book_Check_Procedure(?,?)}";

DbDriverManager dbManager = DbDriverManager.getInstance(); conn = dbManager.getConnection(Constants.DATABASE);

try { cstmt = (OracleCallableStatement) conn.prepareCall(sql);

//定义oracle中的数组类型 desc = ArrayDescriptor.createDescriptor("IDARRAY", conn); bookIdArray = new ARRAY(desc, conn, bookIds);

cstmt.setObject(1, bookIdArray, oracle.jdbc.OracleTypes.ARRAY); cstmt.registerOutParameter(2, Types.INTEGER); cstmt.execute(); count = cstmt.getInt(2);

log.info(this.getClass() + ".checkBookStatus: count = " + count);

DbOperHelp.closeStatement(this.getClass(), cstmt); DbOperHelp.closeConnection(this.getClass(), conn); } catch (SQLException e) {

log.error(this.getClass() + ".checkBookStatus--SQLException: " + e.getMessage()); DbOperHelp.closeStatement(this.getClass(), cstmt); DbOperHelp.closeConnection(this.getClass(), conn); throw new DataAccessException( "When check the books, there is a SQLException: " + e.getMessage(), e.getCause()); }

if (count 0) {

flag = true; }

return flag; }

Oracle定义变量和字段时,number与number有何区别

Oracle定义变量和字段时,number与number有何区别

在Oracle中NUMBER的定义: 1、只有一个参数时,如NUMBER(24)。表示所定义的数字最大可设置24位整数。 2、有两个参数时,如NUMBER(38, 3)。表示所定义的数字最大是38位长,其中包含3位小数。就是说这个类型最大可设置35位整数和3位小数。

很明显的一个问题

v_forgid number,

v_detailcode varchar2

是存储过程的两个输入参数,调用该存储过程时赋值的两个参数变量

而as后面

v_fid number;

v_detailval number;

是存储过程自定的两个参数,作用v_fid 是接受输入参数的值,如v_fid := v_forgid;。

便于变量赋值 where a.forgid = v_fid

v_detailval 是将从表中查出的 a.detailval字段赋值给v_detailval,暂时存储如: into v_detailval

当然也可以不定义as后面两个自定义变量v_fid 也可以不定义,直接写where a.forgid = v_forgid

这下你应该明白了吧,有空好好看看存储过程就知道咯!

oracle带参(传入,传出)的存储过程怎么执行

1、新建存储过程,Create or Replace  Procedure CHK_SYS_EMP 检查系统工号。

2、定义参数及变量:(TREV IN VARCHAR2,TRES OUT VARCHAR2) IS C_EMP VARCHAR2(25)。

3、存储过程框架用Begin开始,End结束。

4、查看需要调用表的结构以及相关字段。会用到表中的 EMP_NO ENABLED。

5、存储过程按需添加SQL语句。

6、程序运行测试OK。

分享名称:oracle怎么定义参数,什么是oracle初始化参数
文章地址:https://www.cdcxhl.com/article42/dscioec.html

成都网站建设公司_创新互联,为您提供定制网站外贸建站建站公司网站策划移动网站建设网站建设

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

外贸网站建设