Quantcast
Channel: SCN : Discussion List - SAP HANA Developer Center
Viewing all articles
Browse latest Browse all 6412

How can I call a read only procedure in scripted calculation view

$
0
0

I have created a read-only procedure under catalog in my schema that will return 3 columns (SCHEMA_NAME, OBJECT_NAME, TOT_LINE_CNT).

 

--DROP PROCEDURE "ABC"."PROC_OBJ_LINE_CNT";

 

CREATE PROCEDURE "ABC"."PROC_OBJ_LINE_CNT"()

LANGUAGE SQLSCRIPT SQL SECURITY INVOKER  AS

BEGIN

    DECLARE v_arr_sch_name NVARCHAR(500) ARRAY;

  DECLARE v_arr_obj_name NVARCHAR(500) ARRAY;

  DECLARE v_arr_obj_code NCLOB ARRAY;

  DECLARE v_tab_cnt INTEGER := 0;

  DECLARE v_indx INTEGER;

  DECLARE v_sch_name NVARCHAR(500);

  DECLARE v_obj_name NVARCHAR(500);

  DECLARE v_obj_code NCLOB;

    DECLARE v_flg INTEGER := 1;

 

 

  v_tab_code_base = SELECT SCHEMA_NAME AS sch_name, PROCEDURE_NAME AS obj_name, DEFINITION AS obj_code

  FROM "SYS"."PROCEDURES" WHERE PROCEDURE_NAME NOT IN('PROC_ACTUAL_COPA_INSERTS', 'PROC_PLAN_COST_BASED_DETAILS','PROC_LOAD_COPA_COST_BASED_DETAILS')

  UNION ALL

               SELECT SCHEMA_NAME AS schema_name, FUNCTION_NAME AS obj_name, DEFINITION AS obj_code

  FROM "SYS"."FUNCTIONS"

  UNION ALL

   SELECT SCHEMA_NAME AS schema_name, TRIGGER_NAME AS obj_name, DEFINITION AS obj_code

  FROM "SYS"."TRIGGERS";

 

    v_arr_sch_name := ARRAY_AGG (:v_tab_code_base.sch_name ORDER BY OBJ_NAME);

  v_arr_obj_name := ARRAY_AGG (:v_tab_code_base.obj_name ORDER BY OBJ_NAME);

  v_arr_obj_code := ARRAY_AGG (:v_tab_code_base.obj_code ORDER BY OBJ_NAME);

 

 

  v_tab_cnt := IFNULL(CARDINALITY(:v_arr_obj_name),0);

 

  IF :v_tab_cnt > 0

  THEN

  --Start of loop for record by record read

  FOR v_indx IN 1..v_tab_cnt

  DO

     v_sch_name := NULL;

  v_obj_name := NULL;

  v_obj_code := NULL;

  v_sch_name := :v_arr_sch_name[:v_indx];

  v_obj_name := :v_arr_obj_name[:v_indx];

  v_obj_code := :v_arr_obj_code[:v_indx];

 

         v_tab_with_lines = SELECT P_SCHEMA_NAME AS SCHEMA_NAME, P_OBJECT_NAME AS OBJECT_NAME,P_LINE_NO AS LINE_NO,P_LINE_DATA AS LINE_DATA

  FROM "ABC"."FN_SPLIT_LINES"(:v_sch_name,:v_obj_name, :v_obj_code);

 

 

     IF :v_flg = 1

  THEN

  v_tab = SELECT SCHEMA_NAME,OBJECT_NAME,LINE_NO,LINE_DATA

  FROM :v_tab_with_lines;

  ELSE

  v_tab = SELECT SCHEMA_NAME,OBJECT_NAME,LINE_NO,LINE_DATA

  FROM :v_tab

  UNION ALL

  SELECT SCHEMA_NAME,OBJECT_NAME,LINE_NO,LINE_DATA

  FROM :v_tab_with_lines;

     END IF;

     v_flg := :v_flg + 1;

  END FOR;

  --End of loop for record by record read

    END IF;

   

    SELECT SCHEMA_NAME,OBJECT_NAME, COUNT(DISTINCT LINE_NO) TOT_LINE_CNT FROM :v_tab GROUP BY SCHEMA_NAME, OBJECT_NAME;

   

END;

 

If I call this procedure using sql console, it works fine and gives me output.

 

CALL "ABC"."PROC_OBJ_LINE_CNT"();

 

My requirement is to call this procedure in one of scripted calculation view and save the data in one of the table variable so that I can use it for further calculations.

 

/********* Begin Procedure Script ************/

BEGIN

  var1 = CALL "ABC"."PROC_OBJ_LINE_CNT";

     var2 = SELECT a."SCHEMA_NAME",

                a."OBJECT_NAME",

                COUNT(a.LINE_NO) "TOT_DEF_CNT"

         FROM "ABC".T_CODE_REVIEW a

         WHERE b."REPORTING_DATE" =

                       (SELECT MAX(REPORTING_DATE) FROM "ABC".T_CODE_REVIEW);

        

  var_out = SELECT a."SCHEMA_NAME",

                   a."OBJECT_NAME",

                   a."TOT_LINE_CNT",

                   b."TOT_DEF_CNT"

            FROM :var1 a,

                 :var2 b

            WHERE a."SCHEMA_NAME" = b."SCHEMA_NAME"

            AND a."OBJECT_NAME" = b."OBJECT_NAME";

 

 

END /********* End Procedure Script ************/

 

Error: Incorrect Syntax near CALL :line4.

 

Any help would be appreciated.


Viewing all articles
Browse latest Browse all 6412

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>