2017-03-07 10 views
-1

を返していないストアドプロシージャです。Javaプログラムから呼び出しているストアドプロシージャです。レコードがデータベースに存在する場合に返します。ここではすべて正常に動作していますが、私はあなたがStored Procedure with a Return Statusを呼び出すようにしようとしている間違っていない場合は、Javaで変数file_generationに戻り値を格納していますし、この変数は常に値1値を返さないSQLサーバーストアドプロシージャ以下の値

USE [esp_server] 
GO 
/****** Object: StoredProcedure [dbo].[cs_file_generation_lock] Script Date: 3/7/2017 1:26:21 AM ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

ALTER PROCEDURE [dbo].[cs_file_generation_lock] 
    @pid INTEGER 
AS 
BEGIN 

    DECLARE @RESULT VARCHAR(6); 
    DECLARE @X_LOCK INTEGER; 
    DECLARE @records INTEGER; 
    DECLARE @FLAG INT = 0; 
    DECLARE @FLAG1 INT = 1; 

     IF exists (SELECT PID from cs_file_generation_flag) 
       BEGIN 
        INSERT INTO cs_file_generation_flag VALUES(4056,@FLAG) 
        Return @FLAG 
       END 

     ELSE 
       BEGIN 
        INSERT INTO cs_file_generation_flag VALUES(@pid,@FLAG1) 
        Return @FLAG1  
       END 


END 

Below is my java code 
try 
      { 
       Connection cn = null; 
       CallableStatement stmt = null; 
       try 
       { 
        cn = JdbcUtils.getConnection(); 
        long pid = ConfigServer.getPID(); 

        stmt = cn.prepareCall("{call cs_file_generation_lock(?)}"); 
        stmt.setLong(1, pid); 
        int file_generation = stmt.executeUpdate(); 
        JdbcUtils.commitAndClose(cn, stmt); 
        if(file_generation == 1) 
        { 
         trace1 = TerminalIdTracer.getInstance(); 
         trace1.log(ConfigServerTrace.INFO, "--------------file generation process will start and the file generation value is-- " + file_generation + "process ID :" + pid); 
         new PreProcess().go(args); 
        } 
        else 
        { 
         trace1.log(ConfigServerTrace.INFO, "---------------Please wait the other file generation is in process---------------" + file_generation); 

        } 

       } 
       finally 
       { 
        JdbcUtils.cleanup(cn, stmt); 
       } 

      } 
+2

何をしようとしているのか、何が起こっているのか、何が起こるのかについてもっと多くの情報が必要です。サンプルデータと望みの結果は長い道のりになります。 – Siyual

答えて

1

を保持しているので、それは、任意の値を返しませDOE 。この場合、戻り値を登録して呼び出しで指定する必要があります。

stmt = cn.prepareCall("{?=call cs_file_generation_lock(?)}"); 
stmt.registerOutParameter(1, java.sql.Types.INTEGER); 
stmt.setLong(2, pid); 
stmt.execute(); 
System.out.println("Flag: " + stmt.getInt(1)); 
関連する問題