189 8069 5689

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初始化参数
文章起源:http://jkwzsj.com/article/dscioec.html

其他资讯