Friday, November 20, 2015

SAP HANA- $.hdb stored procedure result set reading

The following example of usage of the SAP HANA XS $.hdb API shows how to connect to the SAP HANA DB and how to read values of the output declaed as table in  HANA Stored procedure.


The example stored procedure already deployed into hana db and it will return OUTPUT_TABLE as a result set


CREATE PROCEDURE "<<SCHEMA_NAME>>"."PROCEDURE_SALES_REPORT"(
            IN DISCOUNT INTEGER,
            OUT OUTPUT_TABLE "<<SCHEMA_NAME>>"."TT_SALES" )
LANGUAGE SQLSCRIPT SQL SECURITY INVOKER 
AS

BEGIN

var1 = SELECT T1.REGION_NAME, T1.SUB_REGION_NAME, T2.PRODUCT_ID, T2.SALES_AMOUNT
            FROM SCHEMA_NAME.REGION AS T1
            INNER JOIN
            SCHEMA_NAME.SALES AS T2
            ON T1.REGION_ID = T2.REGION_ID;

var2 = SELECT T1.REGION_NAME, T1.SUB_REGION_NAME, T1.PRODUCT_ID, T1.SALES_AMOUNT,                   T2.PRODUCT_NAME
            FROM :var1 AS T1
            INNER JOIN
            SCHEMA_NAME.PRODUCT AS T2
            ON T1.PRODUCT_ID = T2.PRODUCT_ID;

OUTPUT_TABLE = SELECT SUM(SALES_AMOUNT) AS SALES_AMOUNT, SUM( SALES_AMOUNT - 
            (SALES_AMOUNT * :DISCOUNT/ 100)) AS NET_AMOUNT,                 
            PRODUCT_NAME, REGION_NAME, SUB_REGION_NAME
            FROM :var2 
            GROUP BY PRODUCT_NAME, REGION_NAME, SUB_REGION_NAME;

END;



Syntax for Calling Stored procedure and reading data from the result set 


      var body = $.request.body.asString();
      var reqObj = JSON.parse(body);
      var action = reqObj.action;
      var discount = $.request.parameters.get('discount');
      var data=[];
      var rs;
   
                 var conn=$.hdb.getConnection({"sqlcc": "PROC_TEST::cred"});
    var pstm= conn.loadProcedure('<< scheme name >>', '<< procedure name >>');
    rs = pstm(discount);
    var rslength =   (rs["OUTPUT_TABLE"]).length;
       
            for(var i = 0 ; i<rslength-1;i++)
            {
      data.push
      ({
           "SALES_AMOUNT":rs["OUTPUT_TABLE"][i]["SALES_AMOUNT"],
           "NET_AMOUNT":rs["OUTPUT_TABLE"][i]["NET_AMOUNT"],
           "PRODUCT_NAME":rs["OUTPUT_TABLE"][i]["PRODUCT_NAME"]
         
       
      });
            }
conn.commit();
   
   
            $.response.setBody(JSON.stringify(data));
    

2 comments: