1. 程式人生 > >【儲存過程】java呼叫 hana 的儲存過程

【儲存過程】java呼叫 hana 的儲存過程

一)儲存過程寫法如下:

CREATE PROCEDURE "HANA_BI"."com.WFJ.OFFLINE.PROCEDURES::TEST" (P_INT INT, out V_RESULT nvarchar(1000)) 
	LANGUAGE SQLSCRIPT
	SQL SECURITY INVOKER 
	--DEFAULT SCHEMA <default_schema_name>
	--READS SQL DATA 
	AS
BEGIN
/***************************** 
	Write your procedure logic 
 *****************************/
 IF P_INT = 0 THEN 
 	   SELECT '資料驗證成功' INTO V_RESULT FROM DUMMY;
 ELSE 
 	 SELECT '資料驗證失敗,資料差異如下:<br>' || string_agg('門店:' || store_name || '(' || store_id || ') ,年份:' 
 	  || year_code || ',月份:' || month_code || ',超市合計:' || SUPER_SUM || ',零本合計:' || STORE_SUM,';<br>') INTO V_RESULT
 	FROM (
 	
		 	SELECT '大樓' AS STORE_NAME ,'21011' AS STORE_ID,'2018' AS YEAR_CODE,'09' AS MONTH_CODE,'200' AS SUPER_SUM,'205' AS STORE_SUM FROM DUMMY
		 	union all
		 	SELECT '大樓','21011','2018','10','200','205' FROM DUMMY
		 )
	;
 END IF;
END;

二)java寫法如下:

public static void main(String[] args) throws Exception {
		try {
			Connection conn = DataBaseDaoImpl.getConnection();
			//建立儲存過程的物件
	         CallableStatement c=conn.prepareCall("{call \"HANA_BI\".\"com.WFJ.OFFLINE.PROCEDURES::TEST\" (?,?) }");
	         //給儲存過程的引數設定值
	         c.setInt(1,1);   //將第一個引數的值設定成100
	         //註冊儲存過程的第二個引數
	         c.registerOutParameter(2,java.sql.Types.VARCHAR);
	         //執行儲存過程
	         c.execute();
	         //得到儲存過程的輸出引數值
	         System.out.println (c.getString(2));
	         conn.close();
		}catch (Exception e) {
			e.printStackTrace();
		}
	}

--over