Как выполнить макрос через хранимую процедуру - PullRequest
0 голосов
/ 12 апреля 2019

Я создал один макрос в Teradata, теперь хочу вызвать этот макрос через хранимую процедуру (только в Teradata).Часть SQL принадлежит макросу.

Я написал эту процедуру на случай, если выполнение макроса через процедуру невозможно.

Пожалуйста, предложите оба варианта.

    CREATE PROCEDURE MDM_STAGE.match_sqls_proc
    (
        in  fname VARCHAR(30),
        in  match_frst_name VARCHAR (100),
        in  lname VARCHAR(30),
        in  match_last_name VARCHAR (100),
        in  addr1 VARCHAR(1000),
        in  zip_cd_base varchar(10),
        in  email VARCHAR(30),
        in phone VARCHAR(30),
        out msgs VARCHAR(10)
    --  INOUT errstr VARCHAR(30)
    )
    begin

        DECLARE  SQLTEXT2 VARCHAR (10) ;
        DECLARE TBL_COUNT INT ;

     select count (*) into :TBL_COUNT from 
    (
    SELECT
    CUST.CUST_ID,
    CUST.FRST_NAME,
    CUST.MATCH_FRST_NAME,
    CUST.LAST_NAME,
    CUST.MATCH_LAST_NAME,
    CUST.GNDR_TYPE_CD,
    STREET_ADDR.ADDR_LN_1_TXT,
    STREET_ADDR.ADDR_LN_2_TXT,
    STREET_ADDR.ADDR_LN_3_TXT,
    cast (coalesce (STREET_ADDR.ADDR_LN_1_TXT,'') ||   ' ' || coalesce 
 (STREET_ADDR.ADDR_LN_2_TXT,'' ) as varchar (1000)) as addr,
   STREET_ADDR.CITY_NAME,
   STREET_ADDR.POSTL_CD,
   STREET_ADDR.STREET_ADDR_ID,
   STREET_ADDR.ADDR_SBTYPE_CD,
   ELCTRNC_ADDR.ELCTRNC_ADDR_ID,
   ELCTRNC_ADDR.ELCTRNC_ADDR_SBTYPE_CD,
   ELCTRNC_ADDR.ELCTRNC_ADDR_TXT,
   TLPHN_NUM.TLPHN_LN_NUM,
   TLPHN_NUM.TLPHN_NUM_ID

  FROM
  MDM_STAGE.REF_CUST_V   CUST

  LEFT OUTER JOIN
  MDM_STAGE.REF_STREET_ADDR_V  STREET_ADDR
  ON
  CUST.CUST_ID = STREET_ADDR.CUST_ID

  AND
 --RDM_ADDRSIM (STREET_ADDR.ADDR_LN_1_TXT ,'2285Main Street' ) =1
  RDM_ADDRSIM ( cast (coalesce (STREET_ADDR.ADDR_LN_1_TXT,'') ||   ' ' || 
  coalesce (STREET_ADDR.ADDR_LN_2_TXT,'' ) as varchar (1000))  ,:addr1)   =1
  AND
  SUBSTR(STREET_ADDR.POSTL_CD,0,6) = (:zip_cd_base)

  LEFT OUTER JOIN
  MDM_STAGE.REF_ELCTRNC_ADDR_V ELCTRNC_ADDR
  ON
  CUST.CUST_ID = ELCTRNC_ADDR.CUST_ID
  /*AND
  STREET_ADDR.ADDR_SBTYPE_CD = ELCTRNC_ADDR.ELCTRNC_ADDR_SBTYPE_CD*/
  AND 
  ELCTRNC_ADDR.ELCTRNC_ADDR_TXT= (:email)

  LEFT OUTER JOIN
  MDM_STAGE.REF_TLPHN_NUM_V TLPHN_NUM
  ON
  CUST.CUST_ID = TLPHN_NUM.CUST_ID
  /*AND
  STREET_ADDR.ADDR_SBTYPE_CD = TLPHN_NUM.ADDR_SBTYPE_CD*/
  AND
  TLPHN_NUM.TLPHN_LN_NUM = (:phone)

  WHERE 
 (RDM_sndx(COALESCE(CUST.Match_FRST_NAME,CUST.CUST_ID))=RDM_sndx(:match_frst_name) 
   AND
   RDM_sndx(COALESCE(STRTOK(CUST.Match_LAST_NAME,' ',1),CUST.CUST_ID))=RDM_SNDX(:match_last_name) 
)
  AND
  (
  TLPHN_NUM.CUST_ID IS NOT NULL
  OR
  ELCTRNC_ADDR.CUST_ID IS NOT NULL
  OR
  STREET_ADDR.CUST_ID IS NOT NULL
  )  A
  ;

     IF   ( TBL_COUNT > 0 ) THEN  SET SQLTEXT2 = 'Match'  ;

        ELSE 
            SET Msgs = 'Non-Match' ;
            END IF;     
    end;

Сообщение об ошибке -

SPL1027: E (L88), оператор SQL отсутствует / неверен 'E (3707): синтаксическая ошибка, ожидалось что-то вроде ключевого слова EXCEPT или ключевого слова UNION или ключевого слова MINUS между') 'и слово «А».

Не знаю, что добавить между словом «А» и «)».Испробовал все возможности, но не удалось.Не уверен, как передать значение SQL в 'count', так как условие более поздней процедуры вызова основано только на этом числе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...