Как выполнить макрос с помощью хранимой процедуры

#stored-procedures #macros

#хранимые процедуры #макросы

Вопрос:

Я создал один макрос в 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’ или ключевого слова ‘МИНУС’ между ‘)’ и словом ‘A’.’.

Понятия не имею, что добавить между словами «А» и «)». Перепробовал все возможности, но безуспешно. Не уверен, как передать значение SQL в ‘count’, поскольку условие процедуры последующего вызова основано только на этом количестве.

Комментарии:

1. Похоже, по крайней мере, один отсутствует )

2. Не могли бы вы указать, где он отсутствует. Я пытался, но все равно возникает ошибка.

3. Перед этим) и

4. Спасибо. теперь он работает. Пожалуйста, предложите, как просмотреть выходные данные после передачи входных параметров.