plsql与java_Oracle之PLSQL与Java应用

增加--只有IN没有OUT

存储过程语句:

--插入语句,没有输出参数,只有输入参数

CREATE OR REPLACE PROCEDURE ADD_DEPT (

P_DEPTNO IN NUMBER ,

P_DNAME IN VARCHAR2 ,

P_DEPTLOC IN VARCHAR2

)

AS BEGIN

INSERT INTO DEPT VALUES(P_DEPTNO,P_DNAME,P_DEPTLOC) ;

COMMIT ;

END ;

/

在Java中调用该存储过程:

Class.forName(DBDRIVER) ;

conn = DriverManager.getConnection(URL, USERNAME, PASSWORD) ;

callstmt = conn.prepareCall("{call ADD_DEPT(?,?,?)}") ;

callstmt.setInt(1, 87) ;

callstmt.setString(2, "HR") ;

callstmt.setString(3, "MIAMI") ;

callstmt.executeUpdate();

conn.commit();

删除-只有IN没有OUT

存储过程语句:

--根据ID号删除部门信息

CREATE OR REPLACE PROCEDURE DELETE_DEPT_BY_ID

(

P_DEPTNO IN NUMBER

)

AS BEGIN

DELETE FROM DEPT WHERE DEPTNO=P_DEPTNO ;

END ;

/

在Java中调用该存储过程:

Class.forName(DBDRIVER) ;

conn = DriverManager.getConnection(URL, USERNAME, PASSWORD) ;

callstmt = conn.prepareCall("{call DELETE_DEPT_BY_ID(?)}") ;

callstmt.setInt(1, 87) ;

callstmt.executeUpdate();

conn.commit();

修改-只有IN没有OUT

存储过程语句:

--根据部门号更新部门信息

CREATE OR REPLACE PROCEDURE UPDATE_DEPT_BY_ID

(

P_DEPTNO IN NUMBER ,

P_DNAME IN VARCHAR2 ,

P_LOC IN VARCHAR2

)

AS BEGIN

UPDATE DEPT SET DNAME=P_DNAME,LOC=P_LOC WHERE DEPTNO=P_DEPTNO ;

END ;

/

在Java中调用该存储过程:

Class.forName(DBDRIVER) ;

conn = DriverManager.getConnection(URL, USERNAME, PASSWORD) ;

callstmt = conn.prepareCall("{call UPDATE_DEPT_BY_ID(?,?,?)}") ;

callstmt.setInt(1, 80) ;

callstmt.setString(2, "THE_HR") ;

callstmt.setString(3, "MIAMI,USA") ;

callstmt.executeQuery();

conn.commit();

查询-有IN有OUT:

存储过程语句:

--根据员工编号查询员工的基本信息

CREATE OR REPLACE PROCEDURE QUERY_EMP_BY_ID

(

P_EMPNO IN OUT NUMBER ,

P_ENAME OUT VARCHAR2 ,

P_JOB OUT VARCHAR2 ,

P_MGR OUT VARCHAR2 ,

P_HIREDATE OUT DATE ,

P_SAL OUT NUMBER ,

P_COMM OUT NUMBER ,

P_DNAME OUT VARCHAR2 ,

P_LOC OUT VARCHAR2

)

IS

BEGIN

SELECT  E.EMPNO, E.ENAME ,E.JOB ,E.MGR ,E.HIREDATE,E.SAL ,E.COMM ,D.DNAME ,D.LOC

INTO    P_EMPNO ,P_ENAME ,P_JOB ,P_MGR ,P_HIREDATE,P_SAL ,P_COMM ,P_DNAME ,P_LOC

FROM EMP E,DEPT D WHERE E.DEPTNO=D.DEPTNO AND E.EMPNO=P_EMPNO ;

IF P_COMM IS NULL THEN

P_COMM:=100 ;

END IF ;

END QUERY_EMP_BY_ID ;

/

在Java中调用存储过程:

Class.forName(DBDRIVER) ;

conn = DriverManager.getConnection(URL, USERNAME, PASSWORD) ;

callstmt = conn.prepareCall(callSql) ;

callstmt.setInt("P_EMPNO", 7521) ;

callstmt.registerOutParameter("P_ENAME", oracle.jdbc.OracleTypes.VARCHAR) ;

callstmt.registerOutParameter("P_JOB", oracle.jdbc.OracleTypes.VARCHAR) ;

callstmt.registerOutParameter("P_MGR", oracle.jdbc.OracleTypes.NUMBER) ;

callstmt.registerOutParameter("P_HIREDATE", oracle.jdbc.OracleTypes.DATE) ;

callstmt.registerOutParameter("P_SAL", oracle.jdbc.OracleTypes.NUMBER) ;

callstmt.registerOutParameter("P_COMM", oracle.jdbc.OracleTypes.NUMBER) ;

callstmt.registerOutParameter("P_DNAME", oracle.jdbc.OracleTypes.VARCHAR) ;

callstmt.registerOutParameter("P_LOC", oracle.jdbc.OracleTypes.VARCHAR) ;

callstmt.executeQuery();

System.out.println( "姓名 : "+callstmt.getString("P_ENAME") ) ;

System.out.println( "工作 : "+callstmt.getString("P_JOB") ) ;

System.out.println( "入职 : "+callstmt.getDate("P_HIREDATE") ) ;

System.out.println( "薪水 : "+callstmt.getFloat("P_SAL") ) ;

System.out.println( "奖金 : "+callstmt.getFloat("P_COMM") ) ;

System.out.println( "部门 : "+callstmt.getString("P_DNAME") ) ;

System.out.println( "地址 : "+callstmt.getString("P_LOC") ) ;

存储过程语句:

--查询某职位的所有员工,自定义类型EMPS_CUR

CREATE OR REPLACE PACKAGE PKG_EMPS

AS

TYPE ALL_EMPS IS REF CURSOR ;

END ;

/

CREATE OR REPLACE PROCEDURE GET_EMPS

(

P_JOB IN VARCHAR2 ,

P_EMPS_CUR OUT PKG_EMPS.ALL_EMPS  --引用自定义类型

)

IS BEGIN

OPEN P_EMPS_CUR FOR

SELECT E.EMPNO,E.ENAME,E.JOB,E.HIREDATE,E.SAL,E.COMM,D.DNAME,D.LOC FROM EMP E,DEPT D WHERE E.DEPTNO=D.DEPTNO AND JOB=P_JOB ;

END GET_EMPS;

/

在Java中调用存储过程:

Class.forName(DBDRIVER) ;    conn = DriverManager.getConnection(URL, USERNAME, PASSWORD) ;    callstmt = conn.prepareCall("{call GET_EMPS(?,?)}") ;        callstmt.setString(1, "SALESMAN") ;    callstmt.registerOutParameter(2, oracle.jdbc.OracleTypes.CURSOR) ;    callstmt.execute();    rs = (ResultSet) callstmt.getObject(2) ;    while(rs.next())    {     StringBuilder oneRowResult = new StringBuilder() ;     for(int i = 1 ; i<=8 ; i++)     {      oneRowResult.append(rs.getString(i)).append(" ") ;     }     System.out.println(oneRowResult.toString());    }    conn.commit();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值