1

How to call this stored procedure in java class? and declare a string variable equal to it?

GenORFinalSP(name of 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

for example I want to declare a string variable test equal to it.

String test = GenORFinalSP();

updated: this is the code of 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
Arem
  • 35
  • 2
  • 10
  • 1
    [JDBC CallableStatement](http://docs.oracle.com/javase/7/docs/api/java/sql/CallableStatement.html) – Edwin Dalorzo Sep 03 '13 at 15:11
  • I've already used this but there is something missing `Connection conn = getMySQLConnection(); String sp = "{call GenORFinalSP()}"; CallableStatement cs = conn.prepareCall(sp); ResultSet rs = cs.executeQuery();` – Arem Sep 03 '13 at 15:15
  • You're in good track but you still need process the `ResultSet` to retrieve your SP response. A few questions: a) What is supposed your SP must return? b) Which SQL dialect are you using? – dic19 Sep 03 '13 at 15:25
  • ans a.) a concatenation of 4 values (xRCO, xReceipt, @tempCount, @tempORNo) b.) MySQL – Arem Sep 03 '13 at 15:28

1 Answers1

0

The answer is generic for problem like your and rest of the cases, someone may be benefited ;-) this code will work if your procedure don't have arguments and it won't like to return anything back.

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

if you are interested in to pass some arguments to the procedure like

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

and if you are interested in to pass some arguments and want to return some values from the procedure like in this case two returned values, then the call will be like

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

Note: the call to various usecases also demand to change your procedure accordingly

rykhan
  • 309
  • 4
  • 15