Tag: 存储过程

从java中的mysql存储过程中获取参数

我有问题从java中的mysql存储过程检索OUT参数。 CALL proc_after_topic_add(‘newtest’,@result); SELECT @result; 这个查询给了我想要的参数,但我将如何在java中检索它。我尝试使用CallableStatement但我得到了 java.sql.SQLException: Callable statments not supported. 错误。请伙计们帮助我。 我试过跟随 String sql = “CALL proc_after_topic_add(?,?);”; CallableStatement cstmt = conn.prepareCall(sql); cstmt.setString(1, topicname); cstmt.registerOutParameter(2, java.sql.Types.INTEGER); ResultSet rs = cstmt.executeQuery(); if (rs.next()) { if (rs.getInt(1) == 1) { res = 0; } else { res = -1; } } 我没有发布存储过程代码,因为它没有任何问题。 PS:I a using mysql 5.5.21 […]

从Java中的Oracle存储过程中获取ResultSet

我一直在浏览论坛中与我的问题相关的很多post,但我没有帮助我,所以我发布了我的问题。 我在Oracle(11g)中有一个SP,它被假定为返回结果集。 SP如下所示: CREATE OR REPLACE PROCEDURE testProc ( tableName IN VARCHAR2, INFORMATION OUT SYS_REFCURSOR ) AS sqlQuery varchar2(1000); BEGIN sqlQuery := ‘SELECT ID||”|”||Name||”|”||Surname FROM ‘||tableName; OPEN INFORMATION FOR sqlQuery; END GETVALIDATIONPECLOG; 我从java中调用它的方式是 … CallableStatement cs = null cs = connection.prepareCall(“{call getvalidationpeclog(?,?)}”); cs.setString(1, table); cs.registerOutParameter(2, OracleTypes.CURSOR); System.out.println(“AS: ” + cs.execute()); //Returns false rs = (ResultSet) […]

从java为Oracle类型TABLE调用存储过程

我在Oracle中有一个存储过程,如下所示。 create or replace TYPE T_EMP_OBJ AS OBJECT (Name varchar2(20), Age CHAR(3 CHAR)); create or replace type T_EMP_REC as table of T_EMP_OBJ; create or replace PROCEDURE P_EMP (I_NAV_REC IN T_INAV_REC, p_out OUT MY_TYPES_PKG.REFCURSOR) AS … END P_EMP; 我从java调用该过程。 我的代码是, StructDescriptor structDesc = new StructDescriptor(“T_EMP_OBJ”, oracleConnection); ArrayDescriptor arrayDesc2 = new ArrayDescriptor(“T_EMP_REC”, oracleConnection); Object[] objType = new […]

无法在SQL Server上使用Java和JDBC执行存储过程

我一直在尝试通过JDBC执行MS SQL Server存储过程,到目前为止一直没有成功。 存储过程有1个输入和1个输出参数。 我在代码中设置存储过程调用时使用的每个组合都会收到一条错误,指出无法找到存储过程。 我已经提供了我正在执行的存储过程(注意:这是供应商代码,所以我无法更改它)。 set ANSI_NULLS ON set QUOTED_IDENTIFIER ON GO ALTER PROC [dbo].[spWCoTaskIdGen] @OutIdentifier int OUTPUT AS BEGIN DECLARE @HoldPolicyId int DECLARE @PolicyId char(14) IF NOT EXISTS ( SELECT * FROM UniqueIdentifierGen (UPDLOCK) ) INSERT INTO UniqueIdentifierGen VALUES (0) UPDATE UniqueIdentifierGen SET CurIdentifier = CurIdentifier + 1 SELECT @OutIdentifier = (SELECT CurIdentifier […]

将List of Bean传递给oracle存储过程的Java程序 – 一次传递整个列表而不是一个接一个地追加对象

我有以下TYPE,PROCEDURE和Java代码集。 我能够成功调用存储过程,但我必须一个接一个地追加对象。 我希望这个过程一次性发生,因为我正在处理超过50K +的记录。 任何人都可以让我知道需要做哪些更改,以便我可以将整个列表发送到一个。 代码可以在下面找到。 TYPES: CREATE OR REPLACE TYPE CER_GL_ENTRY_TYPE AS OBJECT (idKey NUMBER(10) ); CREATE or REPLACE TYPE CER_GL_ENTRY_TYPE_LIST AS TABLE OF CER_GL_ENTRY_TYPE; PROCEDURE: CREATE OR REPLACE PROCEDURE GL_PROCESS_BULK_ENTRIES ( p_array IN CER_GL_ENTRY_TYPE_LIST ,p_status OUT VARCHAR2) AS v_count NUMBER(5); row_detail CER_GL_ENTRY_TYPE; BEGIN –p_arr_int := NEW array_int (); –p_arr_int.EXTEND (10); –len := p_array.COUNT; […]

{Core Java with Spring}通过普通JDBC调用PL SQL存储过程 – 谁应该理想地进行事务管理

我的应用程序从Java / Spring调用Oracle存储过程。 没有Hibernate或iBatis或Spring JDBC模板。 从没有业务逻辑检查,没有validation的意义上讲,这个服务器端/中间层是“瘦的”; 它只是UI和数据库之间的数据传输层。 java代码在数据检索或数据持久性的情况下调用存储过程。 存储过程是与各种表/表关系交互并聚合数据的大家伙。 问题 – 在这种情况下,谁应该理想地管理交易? 从Java代码还是从存储过程? 通常,当中间层管理数据或执行业务逻辑,或者validation时,我们将使用普通的JDBC / ORM框架与各种表进行交互,从而管理事务。 但在我的用例中,SP正在与表进行交互,决定数据是否被正确检索或能够持久,为什么它应该依靠中间层来单独管理事务。 它可以很好地知道是提交事务还是回滚事务。 在数据检索的情况下总是编写一个为聚合函数作为高级接口的SP,或者在数据持久化的情况下编写汇总函数,并最终执行事务提交或事务回滚,这不是更好吗? 只有在预期为特定操作调用多个SP时,中间层才需要处理事务管理。 只要java代码只为特定操作[fetch / update / delete]调用一个SINGLE存储过程,管理存储过程本身的事务提交和回滚是不是很好? 如果SP内部出现问题,它可以回滚事务并引发exception,然后Java会将该exception消息[或记录并将自定义exception传递]传递给UI。 反问题是让SP在遇到任何exception的情况下引发exception,并且Java代码反过来捕获exception并执行事务回滚。 如果在调用SP时没有exception,则让它进行事务提交。 但是在这里,SP已经知道事务是成功还是失败,那么为什么我们不能自己进行提交或回滚,而是以exception或无exception的forms传递该信息并让java代码执行提交/回滚? 更新:certificate需要Java代码来管理事务的一件事是它调用MULTIPLE SP进行SINGLE操作。 但是,同样的结果可以通过一个高级例程来实现,该例程执行内部调用各个例程的逻辑,最后做出提交/回滚的决定。 请分享您对此的想法/建议/设计建议。 PS:我这里没有共享任何代码,但这是一个程序设计问题,关于谁应该管理交易?

有没有更好的方法从StoredProc检索多个CURSOR到Java?

我有一个从存储过程中检索DB2游标的解决方案,但我正在寻找更好的方法。 目前的解决方案如下所述: – 存储过程: – CREATE OR REPLACE PROCEDURE Proc(c1 OUT SYS_REFCURSOR, c2 OUT SYS_REFCURSOR, c3 OUT SYS_REFCURSOR, ….) is BEGIN open c1 FOR select feild1,feild2,…. from RSPNSE_TABLE1; open c2 FOR select feild1,feild2,…. from RSPNSE_TABLE2; open c3 FOR select feild1,feild2,…. from RSPNSE_TABLE3; open c4 FOR select feild1,feild2,…. from RSPNSE_TABLE4; open c5 FOR select feild1,feild2,…. from […]

带有返回值的存储过程

我有一个存储过程“test”,看起来像: CREATE PROCEDURE test @name varchar(32) AS DECLARE @login_status TINYINT, @syb_login varchar(20), @syb_pass varchar(20) … .. BEGIN SELECT @status = 0 SELECT @login as login, @pass as pass, @status as status RETURN 0 END 我需要将一个输入参数“myName”作为输入参数传递给此过程,然后返回登录,传递和状态作为输出(仅来自一个记录)参数。 在JDBC中,我试着像下面这样做: String query = “{call test(?,?,?)}”; System.out.println(query); CallableStatement proc = null; ResultSet rs; try { proc = connection.prepareCall(query); proc.setString(1, “myName”); […]

如何在使用flywaydb时对版本控制存储过程进行版本控制?

我目前有一个使用Microsoft SQL Server后端的Java Web应用程序。 数据库迁移当前由sqlcmd手动完成,它使用:r命令引用存储过程和视图的脚本文件。 这样,每个存储过程都有自己的文件“proc_someprocedure.sql”。迁移由升级脚本“6.1 upgrade.sql”完成,该脚本将proc文件放弃并在其当前版本中重新创建。 我们希望迁移到flyway并让应用程序在部署时迁移它自己的数据库。 但是,我找不到任何简单的方法来为每个存储过程维护单个源代码文件。 如果存储过程发生更改,我需要在版本控制中对V_6_1__change.sql文件和proc_someprocedure.sql文件进行更改。 我正在尝试避免复制/粘贴的sql代码,因为它在过去困扰我们。其他人如何处理这种情况?

如何使用hibernate在spring boot中调用MySQL存储过程?

我在MySQL存储过程中编写了一些逻辑。我正在使用带有hibernate的spring boot 。 我有一个IN OUT参数的登录程序。 从我的登录程序,我想传递给用户的消息。 但我不知道如何在Spring启动时调用存储过程。 我的代码是吼叫.. 我的登录程序是 CREATE PROCEDURE login(IN in_user_id varchar(100), IN in_password varchar(100), OUT out_code INT, OUT out_message varchar(100)) BEGIN IF in_user_id IS NULL OR in_user_id = ” THEN SET out_code = 1; SET out_message = ‘Please Enter Your First Name.’; END IF; /*Logi Here*/ END; 我曾经使用过类实体类 @Entity @Table(name = “user”) […]