2013-09-03 2 views
0

Как вызвать эту хранимую процедуру в классе java? и объявить строчную переменную равную ей?Вызов хранимой процедуры в Java-классе

GenORFinalSP (имя SP)

BEGIN 

DECLARE temp_OR VARCHAR(50); 

CALL GenORSP(xRCO, xReceipt, @tempCount, @tempORNo); 

SET xROR = @tempORNo; 

WHILE xROR = (SELECT TPAY_RECEIPT_NO FROM tbl_tax_payment WHERE TPAY_RECEIPT_NO = xROR) 
    DO 
     CALL GenORSP(xRCO, xReceipt, @tempCount, @tempORNo); 
END WHILE; 

SET xROR = @tempORNo; 

SET xCount = @tempCount; 

END 

, например, я хочу объявить переменную тест строки, равный ему.

String test = GenORFinalSP(); 

обновление: это код GenORSP

BEGIN 

DECLARE var_MAX BIGINT(20); 
DECLARE temp_COUNT BIGINT(20); 
DECLARE var_YEAR VARCHAR(4); 
DECLARE var_tempYEAR VARCHAR(4); 
DECLARE var_END INT(1); 

SET temp_COUNT = 0; 
SET var_END = 0; 
SET var_YEAR = YEAR(CURRENT_TIMESTAMP); 

    SELECT (CASE WHEN MAX(TPAY_COUNTER) IS NULL THEN 0 ELSE MAX(TPAY_COUNTER) END), YEAR (DATE(TPAY_ISSUED_DATE)) INTO var_MAX, var_tempYEAR FROM tbl_tax_payment where TPAY_ISSUED_DATE = (SELECT MAX(TPAY_ISSUED_DATE) FROM tbl_tax_payment WHERE RCO_CODE = xRCO AND RECEIPT_TYPE = xReceipt AND YEAR(DATE(TPAY_ISSUED_DATE)) = YEAR(current_date) AND TPAY_COUNTER = (
     SELECT 
      MAX(TPAY_COUNTER) 
     FROM 
      tbl_tax_payment 
     WHERE 
      RCO_CODE = xRCO 
     AND RECEIPT_TYPE = xReceipt 
     AND YEAR (DATE(TPAY_ISSUED_DATE)) = YEAR (CURRENT_DATE) 
    )) AND TPAY_COUNTER = (
      SELECT 
       MAX(TPAY_COUNTER) 
      FROM 
       tbl_tax_payment 
      WHERE 
      RCO_CODE = xRCO 
     AND RECEIPT_TYPE = xReceipt 
      AND YEAR (DATE(TPAY_ISSUED_DATE)) = YEAR (CURRENT_DATE) 
     ); 



     IF var_YEAR <> var_tempYEAR THEN 

      SET var_END = (SELECT IF(YEAR(current_date) = var_tempYEAR,0,1)); 

      IF var_END = 1 THEN 

       SET var_MAX = 0; 

      END IF; 

     END IF; 


     IF var_MAX = 0 THEN 

      SET temp_COUNT = 1; 
      SET var_OR = CONCAT(xReceipt, var_YEAR, '-', xRCO, '-', LPAD(temp_COUNT, 6, '0')); 

     ELSE 

      SET temp_COUNT = var_MAX + 1; 
      SET var_OR = CONCAT(xReceipt, var_YEAR, '-', xRCO, '-', LPAD(temp_COUNT, 6, '0')); 

     END IF; 


      SET var_COUNT = temp_COUNT; 



END 
+1

[JDBC CallableStatement] (http://docs.oracle.com/javase/7/docs/api/java/sql/CallableStatement.html) –

+0

Я уже использовал это, но что-то не хватает 'Connection conn = getMySQLConnection(); \t String sp = "{вызов GenORFinalSP()}"; \t CallableStatement cs = conn.prepareCall (sp); \t ResultSet rs = cs.executeQuery(); ' – Arem

+0

Вы находитесь в хорошем состоянии, но вам по-прежнему нужен процесс' ResultSet' для получения ответа SP. Несколько вопросов: а) Что должен вернуть ваш СП? b) Какой SQL-диалект вы используете? – dic19

ответ

0

Ответ общий для задачи, как ваш и остальных случаях, кто-то может получить пользу ;-) этот код будет работайте, если в вашей процедуре нет аргументов, и она не хочет ничего возвращать.

Connection connection = getYourDatabaseConnection();   
CallableStatement callableStatement = connection.prepareCall("{ call GenORFinalSP() }"); 
ResultSet resultSet = callableStatement.executeQuery(); 
//OR 
//int rowsUpdated = callableStatement.executeUpdate(); 

, если вы заинтересованы в том, чтобы передать некоторые аргументы процедуры, как

CallableStatement callableStatement = connection.prepareCall("{call GenORFinalSP(?,?)}"); 
callableStatement.setString(1, firstArgu); 
callableStatement.setString(2, secondArgu) 
ResultSet resultSet = callableStatement.executeQuery(); 

и если вы заинтересованы, чтобы передать некоторые аргументы и хотите вернуть некоторые значения из процедуры, как в этом случае два возвращаемые значения, то вызов будет как

CallableStatement callableStatement = connection.prepareCall("{call GenORFinalSP(?,?,?,?)}"); 
callableStatement.setString(1, firstArgu); 
callableStatement.setString(2, secondArgu) 
callableStatement.registerOutParameter(3, Types.VARCHAR); 
callableStatement.registerOutParameter(4, Types.VARCHAR); 
ResultSet resultSet = callableStatement.executeQuery(); 
String firstReturnedResult = callableStatement.getString(3);//getting returned result back 
String secondReturnedResult = callableStatement.getString(4);//getting returned result back 

Примечание: призыв к различным usecases также требуют, чтобы изменить процедуру соответственно

Смежные вопросы