Skip to Content

Parallel Processing and Parameters

Leveraging SQLScript in stored procedures, user-defined functions, and user-defined libraries.
You will learn
  • How to take full advantage of parallel processing in SAP HANA by using table variables
rich-heilmanRich HeilmanJanuary 5, 2021
Created by
ccmehil
September 5, 2016
Contributors
rich-heilman
ccmehil

Prerequisites

  • This tutorial is designed for SAP HANA on premise and SAP HANA, express edition. It is not designed for SAP HANA Cloud.
  • Tutorials: Creating Stored Procedures

In this exercise, we will modify the code of procedure get_po_header_data so that it takes full advantage of the parallel processing within HANA by using table variables.

  • Step 1

    Return to your procedure called get_po_header_data.

    Existing Procedure

    Define two tabular output parameters which will be used to explicitly pass the results of the SELECT statements to the caller.

    Define output
  • Step 2

    Next, assign SELECT statements to the output parameters as shown here.

    assign select

    The completed code should be similar to this.

    PROCEDURE "get_po_header_data"(
        OUT EX_PO_CREATE_CNT TABLE(
           CREATE_CNT INTEGER,
          "HISTORY.CREATEDBY.EMPLOYEEID" NVARCHAR(10)),
        OUT EX_PO_CHANGE_CNT TABLE(
           CHANGE_CNT INTEGER,
           "HISTORY.CHANGEDBY.EMPLOYEEID"  NVARCHAR(10)) )  
       LANGUAGE SQLSCRIPT
       SQL SECURITY INVOKER
       --DEFAULT SCHEMA <default_schema_name>
       READS SQL DATA AS
    BEGIN
    
    ex_po_create_cnt = SELECT COUNT(*) AS CREATE_CNT, "HISTORY.CREATEDBY.EMPLOYEEID"
         FROM "PO.Header" WHERE PURCHASEORDERID IN (
                         SELECT PURCHASEORDERID
                              FROM "PO.Item"
              WHERE "PRODUCT.PRODUCTID" IS NOT NULL)
    GROUP BY  "HISTORY.CREATEDBY.EMPLOYEEID";
    
    ex_po_change_cnt = SELECT COUNT(*) AS CHANGE_CNT, "HISTORY.CHANGEDBY.EMPLOYEEID"
         FROM "PO.Header"  WHERE PURCHASEORDERID IN (
                         SELECT PURCHASEORDERID
                              FROM "PO.Item"
              WHERE "PRODUCT.PRODUCTID" IS NOT NULL)
    GROUP BY  "HISTORY.CHANGEDBY.EMPLOYEEID";
    
    END
    
  • Step 3

    Save the procedure.

    Save Procedure

    Perform a build on the hdb module.

    Build Module
  • Step 4

    Return to the Database Explorer page and run the procedure again.

    HRTT

    The CALL statement will be inserted into a new “SQL” tab. Click the Run button

    Run
  • Step 5

    Check the execution time again, you may notice that it is a bit faster this time. The reason is that these SQL statements are now executed in parallel.

    Check execution time
Back to top