您的位置:首页 > 数据库 > Oracle

让你 Oracle 的存储过程与Java代码开始进行交互

2017-04-06 15:53 260 查看
Oracle 存储过程定义格式如下:

sql 代码

CREATE OR REPLACE PROCEDURE PRO_YOUR_PROCEDURE (   

    ELEMENT_01     IN      ELEMENT_TYPE,  --COMMENTS   

     .......       ....        .....            ....   

    ELEMENT_0S     OUT     ELEMENT_TYPE,  --COMMENTS   

      ....         ...         ...           ....   

)   

AS  

    ARGUMENT_01    ARGUMENT_TYPE(ARGUMENT_RANGE);   

    ...................   

BEGIN  

    --AND YOUR CODE HERE !   

END;   

EXCEPTION   

WHEN  

    OTHERS   

THEN  

    RAISE_APPLICATION_ERROR(-20003,[YOUR EXCEPITON MESSAGE HERE !]);   

    

END;   

COMMIT;--IF YOUR WANT , JUST DO SO !    

END PRO_YOUR_PROCEDURE;  

其中,[RAISE_APPLICATION_ERROR(-20003,[YOUR EXCEPITON MESSAGE HERE !]);]中的“-20003”是 Oracle 提供的用于用户进行错误自定义的扩充代码。其值可以随便定义,但是也有范围: -20000 到-20999的负整数。
注意到,在存储过程的参数定义中除了IN外,还有个OUT,IN类型的参数是很好理解的,其目的是为了让存储过程接收参数。那么OUT也就不难理解,他的职责就是提供存储过程执行过后的返回值并将其返回给调用者供其使用。
要用Java调用存储过程必须引用“import oracle.jdbc.OracleCallableStatement;”类。
Java调用存储过程的基本格式如下所示:

java 代码

public RETURN_TYPE METHOD_NAME(ARGUMENTS,...)throws EXCEPTIONS...{   

        conn=...;//建立数据库连接   

        conn.setAutoCommit(false);//   

        OracleCallableStatement cal = null;   

        try{   

                cal = (OracleCallableStatement) conn.getMetaData().getConnection().prepareCall("call PRO_YOURS(?,...)");   

                //如果你的数据是一堆记录集那么你可能会用下面的方式   

                for(int i=0;i<...;i++){   

                        cal.setString(1,arguments);   

                        … …  … … … … … … … …   

                        cal.registerOutParameter(n,Types.VARCHAR);   

                        String messages=( (OracleCallableStatement) cal).getString(n);   

                           

                }   

        }catch(Exception e){   

        try {   

            conn.rollback();   

        }catch(SQLException ex){}   

        }catch(...){...............}finally{   

                … … … … … …   

                … … … … … …   

        }   

}  

其中,conn.getMetaData().getConnection().prepareCall("call PRO_YOURS(?,...)");是存储过程的Java调用声明。
cal.setString(1,arguments);是往存储过程中传入参数
(OracleCallableStatement) cal).getString(n)是从存储过程中得到执行后的返回值,但是,在此之前,你必须使用cal.registerOutParameter(n,Types.VARCHAR);进行声明
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: