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

Oracle 存储过程定义格式如下:
sql 代码
  1. CREATE OR REPLACE PROCEDURE PRO_YOUR_PROCEDURE (   
  2.     ELEMENT_01     IN      ELEMENT_TYPE,  --COMMENTS   
  3.      .......       ....        .....            ....   
  4.     ELEMENT_0S     OUT     ELEMENT_TYPE,  --COMMENTS   
  5.       ....         ...         ...           ....   
  6. )   
  7. AS  
  8.     ARGUMENT_01    ARGUMENT_TYPE(ARGUMENT_RANGE);   
  9.     ...................   
  10. BEGIN  
  11.     --AND YOUR CODE HERE !   
  12. END;   
  13. EXCEPTION   
  14. WHEN  
  15.     OTHERS   
  16. THEN  
  17.     RAISE_APPLICATION_ERROR(-20003,[YOUR EXCEPITON MESSAGE HERE !]);   
  18.     
  19. END;   
  20. COMMIT;--IF YOUR WANT , JUST DO SO !    
  21. 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 代码
  1. public RETURN_TYPE METHOD_NAME(ARGUMENTS,...)throws EXCEPTIONS...{   
  2.         conn=...;//建立数据库连接   
  3.         conn.setAutoCommit(false);//   
  4.         OracleCallableStatement cal = null;   
  5.         try{   
  6.                 cal = (OracleCallableStatement) conn.getMetaData().getConnection().prepareCall("call PRO_YOURS(?,...)");   
  7.                 //如果你的数据是一堆记录集那么你可能会用下面的方式   
  8.                 for(int i=0;i<...;i++){   
  9.                         cal.setString(1,arguments);   
  10.                         … …  … … … … … … … …   
  11.                         cal.registerOutParameter(n,Types.VARCHAR);   
  12.                         String messages=( (OracleCallableStatement) cal).getString(n);   
  13.                            
  14.                 }   
  15.         }catch(Exception e){   
  16.         try {   
  17.             conn.rollback();   
  18.         }catch(SQLException ex){}   
  19.         }catch(...){...............}finally{   
  20.                 … … … … … …   
  21.                 … … … … … …   
  22.         }   
  23. }  
其中, conn.getMetaData().getConnection().prepareCall("call PRO_YOURS(?,...)");是存储过程的Java调用声明。
cal.setString(1,arguments);是往存储过程中传入参数
(OracleCallableStatement) cal).getString(n)是从存储过程中得到执行后的返回值,但是,在此之前,你必须使用 cal.registerOutParameter(n,Types.VARCHAR);进行声明
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
存储过程是一组预定义的SQL语句组成的代码块,可以在数据库中进行重复使用。在Java中,可以使用Spring Data JPA来调用存储过程。 下面是一个示例代码,展示了如何使用Spring Data JPA调用存储过程: 首先,你需要定义一个接口来访问存储过程。这个接口需要继承JpaRepository或者继承其他Spring Data JPA提供的相关接口。在接口中,使用@Procedure注解来指定要调用的存储过程的名称。 ```java @Repository public interface MyRepository extends JpaRepository<MyEntity, Long> { @Procedure(name = "my_stored_procedure") void callMyStoredProcedure(); } ``` 然后,你可以在你的代码中注入这个接口,并调用存储过程。 ```java @Service public class MyService { private final MyRepository myRepository; public MyService(MyRepository myRepository) { this.myRepository = myRepository; } public void executeStoredProcedure() { myRepository.callMyStoredProcedure(); } } ``` 在上面的示例中,我们定义了一个名为"my_stored_procedure"的存储过程,并在MyRepository接口中使用@Procedure注解进行了标记。在MyService类中,我们注入了MyRepository接口,并调用了callMyStoredProcedure方法来执行存储过程。 请注意,具体的存储过程的调用方式会根据不同的数据库提供商而有所不同。你需要根据自己使用的数据库以及数据库驱动程序的文档来了解如何在Java中调用特定数据库的存储过程。<span class="em">1</span> #### 引用[.reference_title] - *1* [Spring Data JPA调用存储过程实例代码](https://download.csdn.net/download/weixin_38550834/12782345)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值