Context
I want to use the HANA HIERARCHY_TEMPORAL function to work on a SAP KNVH hierarchy with time intervals ; When simply used in a SELECT query, this works fine ; When otherwise using the very same query but assigning it to a table variable, the result is inconsistent.
My problem
This anonymous block works just fine using an HANA HIERARCHY_TEMPORAL function :
DO BEGIN DECLARE hierarchy_type CHAR(1); DECLARE valid_from CHAR(8); DECLARE valid_until CHAR(8); hierarchy_type = 'A' ; valid_from = '20211201' ; valid_until = '20211201' ; SELECT HIERARCHY_RANK , HIERARCHY_TREE_SIZE , HIERARCHY_PARENT_RANK , HIERARCHY_ROOT_RANK , HIERARCHY_LEVEL , HITYP , VKORG , VTWEG , SPART , KUNNR , HKUNNR , node_id , parent_id , valid_from , valid_until , DATAB , DATBI FROM HIERARCHY_TEMPORAL ( SOURCE ( SELECT HIERARCHY_COMPOSITE_ID( HITYP , VKORG , VTWEG , SPART , KUNNR ) AS node_id , CASE HKUNNR WHEN '' THEN NULL ELSE HIERARCHY_COMPOSITE_ID( HITYP , HVKORG , HVTWEG , HSPART , HKUNNR ) END AS parent_id , HITYP , VKORG , VTWEG , SPART , KUNNR , HKUNNR , DATAB AS valid_from , DATBI AS valid_until , DATAB , DATBI FROM SAPKTP. KNVH WHERE KNVH. HITYP = :hierarchy_type ) VALID FROM :valid_from UNTIL :valid_until ); END;
But assigning the very same block and querying the table variable afterwards leads to inconsistent results :
DO BEGIN DECLARE tbl_CLIENT_HIERARCHY TABLE ( HIERARCHY_RANK CHAR , HIERARCHY_TREE_SIZE CHAR , HIERARCHY_PARENT_RANK CHAR , HIERARCHY_ROOT_RANK CHAR , HIERARCHY_LEVEL CHAR , HITYP CHAR , VKORG CHAR , VTWEG CHAR , SPART CHAR , KUNNR CHAR , HKUNNR CHAR , node_id CHAR , parent_id CHAR , valid_from CHAR , valid_until CHAR , DATAB CHAR , DATBI CHAR ); DECLARE hierarchy_type CHAR(1); DECLARE valid_from CHAR(8); DECLARE valid_until CHAR(8); hierarchy_type = 'A' ; valid_from = '20211201' ; valid_until = '20211201' ; tbl_CLIENT_HIERARCHY = SELECT HIERARCHY_RANK , HIERARCHY_TREE_SIZE , HIERARCHY_PARENT_RANK , HIERARCHY_ROOT_RANK , HIERARCHY_LEVEL , HITYP , VKORG , VTWEG , SPART , KUNNR , HKUNNR , node_id , parent_id , valid_from , valid_until , DATAB , DATBI FROM HIERARCHY_TEMPORAL ( SOURCE ( SELECT HIERARCHY_COMPOSITE_ID( HITYP , VKORG , VTWEG , SPART , KUNNR ) AS node_id , CASE HKUNNR WHEN '' THEN NULL ELSE HIERARCHY_COMPOSITE_ID( HITYP , HVKORG , HVTWEG , HSPART , HKUNNR ) END AS parent_id , HITYP , VKORG , VTWEG , SPART , KUNNR , HKUNNR , DATAB AS valid_from , DATBI AS valid_until , DATAB , DATBI FROM SAPKTP. KNVH WHERE KNVH. HITYP = :hierarchy_type ) VALID FROM :valid_from UNTIL :valid_until ); SELECT TOP 10 * FROM :tbl_CLIENT_HIERARCHY; END;
Does anybody know why?
Thank you for your help.
Advertisement
Answer
Actually the problem had nothing to do with HANA hierarchy : I simply didn’t precise between brackets the number of characters for the declared table variable, which is then interpreted as CHAR(1)
, leading to the strange extraction result!