如何通过存储过程执行宏

时间:2019-04-12 10:56:11

标签: 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'关键字或'MINUS'关键字单词“ A”。

不知道,在单词“ A”和“)”之间添加什么。尝试了所有可能性,但未成功。不确定如何将SQL的值传递到“计数”中,因为以后的调用过程条件仅基于该计数。

0 个答案:

没有答案