Hi,

I need some help to translate a PL/SQL script in HiveQL.

Problem : my PL/SQL script is calling two functions.

you can see the script below :

    SELECT
      in_co_societe                             as co_societe,
      'SEMAINE'                                 as co_type_periode,
      a.type_entite                             as type_entite,
      a.code_entite                             as code_entite,
      a.type_rgrp_produits                      as type_rgrp_produits,
      a.co_rgrp_produits                        as co_rgrp_produits,
      SUM(a.MT_CA_NET_TTC)                      as MT_CA_NET_TTC,
      SUM(a.MT_OBJ_CA_NET_TTC)                  as MT_OBJ_CA_NET_TTC,
      SUM(a.NB_CLIENTS)                         as NB_CLIENTS,
      SUM(a.MT_CA_NET_TTC_COMP)                 as MT_CA_NET_TTC_COMP,
      SUM(a.MT_OBJ_CA_NET_TTC_COMP)             as MT_OBJ_CA_NET_TTC_COMP,
      SUM(a.NB_CLIENTS_COMP)                    as NB_CLIENTS_COMP
    from
      kpi.thm_ca_rgrp_produits_jour/*@o_bi.match.eu*/ a
    WHERE
        a.co_societe = in_co_societe
    AND a.dt_jour between
      (
        SELECT
          cal.dt_jour_deb
        FROM ods.calendrier_hebdo cal
        WHERE cal.co_societe = in_co_societe
        AND cal.co_an_semaine = ods.package_date.get_semaine(
          ods.package_date.fcalc_idjour(
            CASE
              WHEN TO_CHAR(D_Dernier_Jour,'YYYY') =
TO_CHAR(D_Dernier_Jour-364,'YYYY') THEN
                NEXT_DAY(D_Dernier_Jour-364,1)-7
              ELSE
                D_Dernier_Jour-364
            END
          )
        )
      )
      AND D_Dernier_Jour-364
    -- On ne calcule rien si la semaine est compl¿¿te
    AND (
          TO_CHAR(D_Dernier_Jour,'DDMM') <> '3112'
      AND TO_CHAR(D_Dernier_Jour,'D') <> '7'
    )
    GROUP BY
      a.type_entite,
      a.code_entite,
      a.type_rgrp_produits,
      a.co_rgrp_produits;

The function ods.package_date.get_semaine is :

FUNCTION GET_SEMAINE
       (ID_DEB  IN NUMBER)
  RETURN NUMBER
  IS
    SEMAINE  NUMBER(10);
  BEGIN
    SELECT CO_AN_SEMAINE
    INTO   SEMAINE
    FROM   CALENDRIER
    WHERE  ID_JOUR = ID_DEB;

    RETURN (SEMAINE);
  EXCEPTION
    WHEN NO_DATA_FOUND THEN
      RETURN (0);
    WHEN OTHERS THEN
      RETURN (0);
  END;

The function ods.package_date.fcalc_idjour is below :

FUNCTION FCALC_IDJOUR
       (DATE_REFERENCE  IN DATE)
  RETURN NUMBER
  IS
    NM_ANNEE        NUMBER := TO_NUMBER(TO_CHAR(DATE_REFERENCE,'YYYY'));
    NM_MOIS         NUMBER :=
TO_NUMBER(SUBSTR(TO_CHAR(DATE_REFERENCE,'YYYYMM'),5,2));
    NM_JOUR         NUMBER :=
TO_NUMBER(SUBSTR(TO_CHAR(DATE_REFERENCE,'YYYYMMDD'),7,2));
    IDJOUR_CALCULE  NUMBER := 0;
  BEGIN
    IF NM_ANNEE < 1998
        OR DATE_REFERENCE IS NULL THEN
      IDJOUR_CALCULE := 0;
    ELSE
      IDJOUR_CALCULE := ((NM_ANNEE - 1998) * 600) + ((NM_MOIS - 01) * 50) +
NM_JOUR;
    END IF;

    RETURN IDJOUR_CALCULE;
    DBMS_OUTPUT.PUT_LINE(IDJOUR_CALCULE);
  END FCALC_IDJOUR;

Is it possible to translate this in one  HiveQL script ?

Reply via email to