Курсор DB2 в вопросах SP - PullRequest
       22

Курсор DB2 в вопросах SP

0 голосов
/ 04 октября 2019

Мы с коллегой пытаемся найти способ извлечения идентификатора сеанса в db2 и использовать его как способ идентификации записей, над которыми работали пользователи, чтобы они могли видеть только свои материалы. Мы делаем это в хранимой процедуре, которая будет вызываться интерфейсом MS Access. Мы определили лучший способ - использовать курсоры. У нас есть идея, но она не совсем работает и у нас есть пара вопросов.

  1. Как сделать курсор переменной хоста постоянным?
  2. Можно ли повторно открыть курсор без объявленияэто снова?

Вот код, который мы имеем до сих пор. Процесс завершается неудачей на шаге 7, где он вызывает функцию:

SET PATH "removed for privacy" ; 

CREATE PROCEDURE INFOMATICS.PROC_OVERLAY_RNTL_NTWK_MATCHING ( ) 
    LANGUAGE SQL 
    SPECIFIC INFOMATICS.PROC_OVERLAY_RNTL_NTWK_MATCHING 
    NOT DETERMINISTIC 
    MODIFIES SQL DATA 
    CALLED ON NULL INPUT 
    SET OPTION  ALWBLK = *ALLREAD , 
    ALWCPYDTA = *OPTIMIZE , 
    COMMIT = *NONE , 
    DBGVIEW = *SOURCE , 
    DECRESULT = (31, 31, 00) , 
    DFTRDBCOL = *NONE , 
    DYNDFTCOL = *NO , 
    DYNUSRPRF = *USER , 
    SRTSEQ = *HEX   
    BEGIN 
        DECLARE NETWORK_YEAR_MONTH VARCHAR(6);
        DECLARE CURR_USER VARCHAR(8);
        DECLARE C1 CURSOR FOR
            SELECT SYSTEM USER FROM SYSIBM.SYSDUMMY1;

        OPEN C1;
        FETCH C1 INTO CURR_USER;

        CLOSE C1;




        SET NETWORK_YEAR_MONTH = LEFT(VARCHAR_FORMAT(CURRENT DATE,'YYYY/DD/MM'),4)||RIGHT(VARCHAR_FORMAT(CURRENT DATE,'YYYY/DD/MM'),2) ;

        --SET INFOMATICS.VAR_OVERLAY_CURR_USER = (SELECT SYSTEM USER FROM SYSIBM.SYSDUMMY1);


        -- PROVIDER MATCHING....

         --DoCmd.RunSQL "update coreMatch as A INNER JOIN tblLiveProviders as B on A.STD_STATE = B.CSTATE and TRIM(A.Clean_License) = TRIM(B.Cleaned_License) and A.NameSearch = B.NameSearch SET A.prvno = B.uprvno, A.PRV_MATCH_CD = 'ST LIC NAME' Where A.prvno is null and (a.clean_License is not NULL or a.clean_License <> '')"

        -- 1) Exact match on State and "Clean License" and Name
        MERGE INTO INFOMATICS.TBL_OVERLAY_COREMATCH AS CM
        USING (SELECT UPRVNO, CSTATE, CLEANED_LICENSE, NAMESEARCH FROM INFOMATICS.TBL_OVERLAY_TBL_LIVEPROVIDERS) AS LP
        ON CM.STD_STATE=LP.CSTATE
        AND TRIM(CM.CLEAN_LICENSE) = TRIM(LP.CLEANED_LICENSE)
        AND CM.NAMESEARCH = LP.NAMESEARCH
        AND CM.PRVNO IS NULL
        AND (CM.CLEAN_LICENSE IS NOT NULL AND CM.CLEAN_LICENSE <> ' ')
        AND CM.USER_ID = INFOMATICS.VAR_OVERLAY_CURR_USER
        AND CM.NTWK_YR_MO = NETWORK_YEAR_MONTH

        WHEN MATCHED THEN
        UPDATE SET CM.PRVNO = LP.UPRVNO, CM.PRV_MATCH_CD = 'ST LIC NAME';


-- LOTS OF CODE SKIPPED HERE FOR CLARITY


        -- 7) Exact match on State and license, mis-spelled name (50% Match Ratio, lengths within 4 chars, DNoA length 5 or more chars
        -- Matching on State, License and Mis-Spelled Name...

        CREATE TABLE INFOMATICS.TEMP_MTCH_LIC AS(
        SELECT DISTINCT LEFT(INFOMATICS.FUNC_OVERLAY_MATCH_LICENSE(CM.NAMESEARCH,LP.NAMESEARCH),INSTR(INFOMATICS.FUNC_OVERLAY_MATCH_LICENSE(CM.NAMESEARCH,LP.NAMESEARCH),':')-1)/LENGTH(LP.NAMESEARCH) AS MatchRatio, 
        INFOMATICS.FUNC_OVERLAY_MATCH_LICENSE(CM.NAMESEARCH,LP.NAMESEARCH) AS MatchResults, ABS(LENGTH(CM.NAMESEARCH)-LENGTH(LP.NAMESEARCH)) AS Len_Diff, LENGTH(LP.namesearch) AS LEN_DNOA, 
        LP.UPRVNO, LP.UPLNAM, LP.UPFNAM, LP.UPSTLN, DNOAEDW.LD(CM.NAMESEARCH,LP.NAMESEARCH) AS Distance, LP.CSTATE, LP.CLEANED_LICENSE, CM.VLNAM, CM.VFNAM, CM.VSTATE, CM.CLEAN_LICENSE, CM.VEXTPRVNO, CM.USER_ID, CM.NTWK_YR_MO
        FROM INFOMATICS.TBL_OVERLAY_COREMATCH AS CM
        INNER JOIN INFOMATICS.TBL_OVERLAY_TBL_LIVEPROVIDERS AS LP ON (CM.CLEAN_LICENSE=TRIM(LP.CLEANED_LICENSE)) AND (CM.VFNAM=LP.UPFNAM) AND (CM.STD_STATE=LP.CSTATE)
        WHERE CM.PRVNO IS NULL AND INFOMATICS.FUNC_OVERLAY_HASHV2(CM.NAMESEARCH)<>INFOMATICS.FUNC_OVERLAY_HASHV2(LP.NAMESEARCH) 
            AND CM.CLEAN_LICENSE<>'' AND SUBSTR(LP.UPLNAM,1,1)<>' ' AND CM.EXCLUDE<>-1 AND CM.USER_ID = CURR_USER AND CM.NTWK_YR_MO = NETWORK_YEAR_MO) WITH DATA;


        --DoCmd.RunSQL "select vExtPRVNO, uprvno, MatchRatio into tempCM from [Provider Live License, State match name does not match] where MatchRatio >= .5 and Len_Diff <= 4 and Len_DNoA >= 5 and (clean_License is not NULL or clean_License <> '')"
        CREATE TABLE INFOMATICS.TEMPCM AS (
        SELECT VEXTPRVNO, UPRVNO, MATCHRATIO, USER_ID, NTWK_YR_MO
        FROM INFOMATICS.TEMP_MTCH_LIC
        WHERE MATCHRATIO >= .5 AND LEN_DIFF <= 4 AND LEN_DNOA >= 5 AND (CLEAN_LICENSE IS NOT NULL OR CLEAN_LICENSE <>'')) WITH DATA;

        --DoCmd.RunSQL "update coreMatch as A INNER JOIN tempCM as B on A.vExtPRVNO = B.vExtPRVNO set A.prvno = B.uprvno, A.PRV_MATCH_CD = 'LIC NAME3', A.prv_match_score = B.MatchRatio where a.prvno is null"

        MERGE INTO INFOMATICS.TBL_OVERLAY_COREMATCH AS CM
        USING (SELECT UPRVNO, VEXTPRVNO, USER_ID, NTWK_YR_MO FROM INFOMATICS.TEMPCM) AS TCM
        ON CM.VEXTPRVNO=TCM.VEXTPRVNO 
            AND CM.USER_ID = TCM.USER_ID
            AND CM.PRVNO IS NULL
            AND CM.USER_ID = CURR_USER 
            AND CM.NTWK_YR_MO = NETWORK_YEAR_MONTH
        WHEN MATCHED THEN
        UPDATE SET CM.PRVNO=TCM.UPRVNO, CM.PRV_MATCH_CD = 'LIC NAME3', CM.PRV_MATCH_SCORE = TCM.MATCHRATIO;

        DROP TABLE INFOMATICS.TEMPCM;

        -- 8) EXACT match ON State AND license, distance match <3 ON lname

        --DoCmd.RunSQL "SELECT vExtPRVNO, uprvno, Distance INTO tempCM FROM [Provider Live License, State match name does not match] WHERE Distance<3"
        CREATE TABLE INFOMATICS.TEMPCM AS (
        SELECT VEXTPRVNO, UPRVNO, DISTANCE, USER_ID, NTWK_YR_MO
        FROM INFOMATICS.TEMP_MTCH_LIC
        WHERE DISTANCE < 3) WITH DATA;

        --DoCmd.RunSQL "update coreMatch as A INNER JOIN tempCM as B on A.vExtPRVNO = B.vExtPRVNO set A.prvno = B.uprvno, A.PRV_MATCH_CD = 'LIC NAME4', A.prv_match_score = B.Distance where a.prvno is null" 

        MERGE INTO INFOMATICS.TBL_OVERLAY_COREMATCH AS CM
        USING (SELECT UPRVNO, VEXTPRVNO, USER_ID, NTWK_YR_MO FROM INFOMATICS.TEMPCM) AS TCM
        ON CM.VEXTPRVNO=TCM.VEXTPRVNO 
            AND CM.USER_ID = TCM.USER_ID 
            AND CM.NTWK_YR_MO = TCM.NTWK_YR_MO
            AND CM.PRVNO IS NULL
            AND CM.USER_ID = CURR_USER 
            AND CM.NTWK_YR_MO = NETWORK_YEAR_MONTH
        WHEN MATCHED THEN
        UPDATE SET CM.PRVNO=TCM.UPRVNO, CM.PRV_MATCH_CD = 'LIC NAME4', CM.PRV_MATCH_SCORE = TCM.DISTANCE;

        DROP TABLE INFOMATICS.INFOMATICS.TEMPCM;
        DROP TABLE INFOMATICS.TEMP_MTCH_LIC;

        -- AND NOW CENTER MATCHING....

        -- 1) Matching on TIN, ZIP5 and Full Address...

        --DoCmd.RunSQL "Update coreMatch as A INNER JOIN tblLiveCenters as B on A.vTIN=B.CTAXID AND A.ZIP=B.ZIP AND trim(A.ADDRESS)=trim(B.ADDRESS) SET A.CTRNO = B.CTRNO, A.CTR_MATCH_CD = 'TIN, addr,zip' 
        --WHERE A.CTRNO IS NULL AND  (a.vTIN IS NOT NULL OR a.vTIN <> '')"

       MERGE INTO INFOMATICS.TBL_OVERLAY_COREMATCH AS CM
        USING (SELECT CTRNO, CTAXID, ADDRESS, ZIP FROM INFOMATICS.TBL_OVERLAY_TBL_LIVECENTERS) AS LC
        ON CM.VTIN=LC.CTAXID 
            AND CM.ZIP=LC.ZIP 
            AND TRIM(CM.ADDRESS) = TRIM(LC.ADDRESS)
            AND CM.PRVNO IS NULL
            AND (CM.VTIN IS NOT NULL AND CM.VTIN <> ' ')
            AND CM.USER_ID = CURR_USER 
            AND CM.NTWK_YR_MO = NETWORK_YEAR_MONTH
        WHEN MATCHED THEN
        UPDATE SET CM.CTRNO = LC.CTRNO, CM.CTR_MATCH_CD = 'TIN, addr,zip';

        -- 2) Exact match on TIN, zip5 and 1st 5 chars of Address1

       -- DoCmd.RunSQL "update coreMatch as A INNER JOIN tblLiveCenters as B ON A.vTIN=B.CTAXID AND A.ZIP=B.ZIP AND LEFT(A.ADDRESS,5)=LEFT(B.ADDRESS,5) 
       --SET A.CTRNO = B.CTRNO, A.CTR_MATCH_CD = 'TIN, 5 addr, zip' WHERE A.CTRNO IS NULL AND (a.vTIN IS NOT NULL OR a.vTIN <> '')"

        MERGE INTO INFOMATICS.TBL_OVERLAY_COREMATCH AS CM
        USING (SELECT CTRNO, CTAXID, ADDRESS, ZIP FROM INFOMATICS.TBL_OVERLAY_TBL_LIVECENTERS) AS LC
        ON CM.VTIN=LC.CTAXID 
            AND CM.ZIP=LC.ZIP 
            AND LEFT(CM.ADDRESS,5) = LEFT(LC.ADDRESS,5)
            AND CM.PRVNO IS NULL
            AND (CM.VTIN IS NOT NULL AND CM.VTIN <> ' ')
            AND CM.USER_ID = CURR_USER 
            AND CM.NTWK_YR_MO = NETWORK_YEAR_MONTH
        WHEN MATCHED THEN
        UPDATE SET CM.CTRNO = LC.CTRNO, CM.CTR_MATCH_CD = 'TIN, 5 addr,zip';

        -- 3) Anagram match on TIN, exact match on Zip5 and 1st 5 chars of Address1

        --DoCmd.RunSQL "UPDATE coreMatch as A INNER JOIN tblLiveCenters as B ON A.TIN_CHAR_CNT=B.TIN_CHAR_CNT AND A.ZIP=B.ZIP AND LEFT(A.ADDRESS,5)=LEFT(B.ADDRESS,5) 
        --SET A.CTRNO = B.ctrno, A.CTR_MATCH_CD = 'Angrm TIN,zip,5 addr' WHERE A.CTRNO IS NULL AND (a.vTIN IS NOT NULL OR a.vTIN <> '')"

        MERGE INTO INFOMATICS.TBL_OVERLAY_COREMATCH AS CM
        USING (SELECT CTRNO, CTAXID, TIN_CHAR_CNT, ADDRESS, ZIP FROM INFOMATICS.TBL_OVERLAY_TBL_LIVECENTERS) AS LC
        ON CM.VTIN=LC.CTAXID 
            AND CM.TIN_CHAR_CNT=LC.TIN_CHAR_CNT
            AND CM.ZIP=LC.ZIP
            AND LEFT(CM.ADDRESS,5) = LEFT(LC.ADDRESS,5)
            AND CM.PRVNO IS NULL
            AND (CM.VTIN IS NOT NULL AND CM.VTIN <> ' ')
            AND CM.USER_ID = CURR_USER 
            AND CM.NTWK_YR_MO = NETWORK_YEAR_MONTH
        WHEN MATCHED THEN
        UPDATE SET CM.CTRNO = LC.CTRNO, CM.CTR_MATCH_CD = 'Angrm TIN,ZIP, 5 addr';

        -- 4) Exact match on addr1, addr2, zip5 and partial match on TIN


        /*SELECT cm.vTIN, cm.ADDRESS, cm.ZIP, Max(Left(matchLicense(ctaxid,vTIN),InStr(matchLicense(ctaxid,vTIN),":")-1)) AS BestScore
        FROM coreMatch AS cm INNER JOIN tblLiveCenters AS c ON (cm.ZIP=c.ZIP) AND (cm.ADDRESS=c.ADDRESS)
        WHERE (((cm.CTRNO) Is Null) AND ((HashV2([vTIN]))<>HashV2([ctaxid])))
        GROUP BY cm.vTIN, cm.ADDRESS, cm.ZIP;
         */

        CREATE TABLE INFOMATICS.TEMP_CM_TINS1 AS (
        SELECT DISTINCT CM.CTRNO, CM.VTIN, CM.ADDRESS, CM.ZIP, MAX(LEFT(INFOMATICS.FUNC_OVERLAY_MATCH_LICENSE(LC.CTAXID, CM.VTIN),INSTR(INFOMATICS.FUNC_OVERLAY_MATCH_LICENSE(LC.CTAXID,CM.VTIN),':')-1)) AS BESTSCORE
        FROM (SELECT CTRNO, VTIN, ADDRESS, ZIP, USER_ID, NTWK_YR_MO FROM INFOMATICS.TBL_OVERLAY_COREMATCH) AS CM 
            INNER JOIN INFOMATICS.TBL_OVERLAY_TBL_LIVECENTERS AS LC ON CM.ZIP=LC.ZIP AND CM.ADDRESS=LC.ADDRESS
            WHERE CM.CTRNO IS NULL AND INFOMATICS.FUNC_OVERLAY_HASHV2(CM.VTIN)<>INFOMATICS.FUNC_OVERLAY_HASHV2(LC.CTAXID)
            AND CM.USER_ID = CURR_USER 
            AND CM.NTWK_YR_MO = NETWORK_YEAR_MO
                GROUP BY CM.VTIN, CM.ADDRESS, CM.ZIP) WITH DATA;

        --SELECT matchLicense(ctaxid,cm.vTIN) AS BestMatchScore, c.ctrno AS PPONAT_CN, c.CNAME, c.CADDR1, c.CADDR2, c.CCITY, c.CSTATE, c.cphone, c.cTaxid, cm.*
        --FROM (coreMatch AS cm INNER JOIN tblLiveCenters AS c ON (cm.ADDRESS=c.ADDRESS) AND (cm.ZIP=c.ZIP)) INNER JOIN [qry Best TIN match Score BY TIN, Address, zip_LiveCntrs] AS B ON (B.vTIN=cm.vTIN) AND (b.zip=cm.zip) AND (B.address=cm.address)
        --WHERE (((cm.CTRNO) IS NULL) AND ((HashV2([cm.vTIN]))<>HashV2([ctaxid]))) AND B.BestScore=LEFT(matchLicense(ctaxid,cm.vTIN),INSTR(matchLicense(ctaxid,cm.vTIN),":")-1) AND exclude<>-1;


        CREATE TABLE INFOMATICS.TEMP_CM_TINS2 AS (
        SELECT DISTINCT INFOMATICS.FUNC_OVERLAY_MATCH_LICENSE(LC.CTAXID,CM.VTIN) AS BESTMATCHSCORE, LC.CTRNO AS PPONAT_CN, LC.CNAME, LC.CADDR1, LC.CADDR2, LC.CCITY, LC.CSTATE, LC.CPHONE,
        LC.CTAXID, CM.VACTIONCODE, CM.NOO, CM.PRVNO, CM.CTRNO, CM.VEXTPRVNO, CM.VEXTCTRNO, CM.VEXTCTR_PRV_NO, CM.VFNAM, CM.VMDIT, CM.VLNAM, CM.NAMESEARCH, CM.VTITLE, CM.VSPECIALTY,
        CM.VSTLN, CM.CLEAN_LICENSE, CM.VPNPI, CM.VSSN, CM.VCNAME, CM.VADDR1, CM.VADDR2, CM.VCITY, CM.VSTATE, CM.VZIP, CM.VPHONE, CM.VTIN, CM.VCNPI, CM.VPAYEE_ADDR1, CM.VPAYEE_ADDR2, 
        CM.VPAYEE_CITY, CM.VPAYEE_STATE, CM.VPAYEE_ZIP, CM.VPAYEE_PHONE, CM.ADDRESS, CM.ADDRESS2, CM.STD_CITY, CM.STD_STATE, CM.ZIP, CM.ZIP4, CM.RTNUSPS, CM.CHGUSPS, CM.STD_COUNTY, 
        CM.STD_COUNTY_FIPS, CM.STD_CBSA, CM.STD_CBSA_TYPE, CM.STD_CBSA_CODE, CM.STD_CLASS, CM.RTNPLACE, CM.CENSUS_TRACT, CM.BLOCK_GROUP, CM.LONGITUDE, CM.LATITUDE, CM.RTNCODE,
        CM.ZIP_TYPE, CM.PAYEE_STD_ADDR1, CM.PAYEE_STD_ADDR2, CM.PAYEE_STD_CITY, CM.PAYEE_STD_STATE, CM.PAYEE_STD_ZIP, CM.PAYEE_STD_ZIP4, CM.EFF_DATE, CM.TERM_DATE, CM.VFEE_SCHED,
        CM.RANK, CM.TIN_CHAR_CNT, CM.TIN_ASCII_VALUE, CM.PARTIAL_MATCH, CM.PRV_MATCH_CD, CM.CTR_MATCH_CD, CM.PRV_MATCH_SCORE, CM.CTR_MATCH_SCORE, CM.EXCLUDE, CM.EXCL_REASON,
        CM.ID, CM.PROGRAMNAME, CM.MATCHTYPE, CM.PPRVNO, CM.PCTRNO, CM.USER_ID, CM.NTWK_YR_MO
        FROM (SELECT VACTIONCODE, NOO, PRVNO, CTRNO, VEXTPRVNO, VEXTCTRNO, VEXTCTR_PRV_NO, VFNAM, VMDIT, VLNAM, NAMESEARCH, VTITLE, VSPECIALTY, VSTLN, CLEAN_LICENSE, VPNPI, VSSN, VCNAME, 
        VADDR1, VADDR2, VCITY, VSTATE, VZIP, VPHONE, VTIN, VCNPI, VPAYEE_ADDR1, VPAYEE_ADDR2, VPAYEE_CITY, VPAYEE_STATE, VPAYEE_ZIP, VPAYEE_PHONE, ADDRESS, ADDRESS2, STD_CITY, STD_STATE, 
        ZIP, ZIP4, RTNUSPS, CHGUSPS, STD_COUNTY, STD_COUNTY_FIPS, STD_CBSA, STD_CBSA_TYPE, STD_CBSA_CODE, STD_CLASS, RTNPLACE, CENSUS_TRACT, BLOCK_GROUP, LONGITUDE, LATITUDE, RTNCODE,
        ZIP_TYPE, PAYEE_STD_ADDR1, PAYEE_STD_ADDR2, PAYEE_STD_CITY, PAYEE_STD_STATE, PAYEE_STD_ZIP, PAYEE_STD_ZIP4, EFF_DATE, TERM_DATE, VFEE_SCHED, RANK, TIN_CHAR_CNT, TIN_ASCII_VALUE, 
        PARTIAL_MATCH, PRV_MATCH_CD, CTR_MATCH_CD, PRV_MATCH_SCORE, CTR_MATCH_SCORE, EXCLUDE, EXCL_REASON, ID, PROGRAMNAME, MATCHTYPE, PPRVNO, PCTRNO, USER_ID, NTWK_YR_MO
        FROM INFOMATICS.TBL_OVERLAY_COREMATCH) AS CM 
        INNER JOIN INFOMATICS.TBL_OVERLAY_TBL_LIVECENTERS AS LC 
        ON CM.ZIP=LC.ZIP AND CM.ADDRESS=LC.ADDRESS 
        INNER JOIN INFOMATICS.TEMP_CM_TINS1 AS TCM1 
        ON (TCM1.ADDRESS=CM.ADDRESS) AND (TCM1.ZIP=CM.ZIP) AND (TCM1.vTIN=CM.VTIN)
        WHERE CM.CTRNO IS NULL AND INFOMATICS.FUNC_OVERLAY_HASHV2(CM.VTIN)<>INFOMATICS.FUNC_OVERLAY_HASHV2(LC.CTAXID) 
        AND TCM1.BESTSCORE=LEFT(INFOMATICS.FUNC_OVERLAY_MATCH_LICENSE(LC.CTAXID,CM.VTIN),INSTR(INFOMATICS.FUNC_OVERLAY_MATCH_LICENSE(LC.CTAXID,CM.VTIN),':')-1) 
        AND exclude<>-1
        AND CM.USER_ID = CURR_USER 
        AND CM.NTWK_YR_MO = NETWORK_YEAR_MO) WITH DATA;



        CREATE TABLE INFOMATICS.TEMP_CM_TINS_LIVECNTRS AS (
        SELECT DISTINCT CM.CTRNO, CM.VEXTCTR_PRV_NO, TCM2.PPONAT_CN, TCM2.BESTMATCHSCORE, CM.USER_ID, CM.NTWK_YR_MO
        FROM (SELECT VEXTCTR_PRV_NO, VTIN, VZIP, ADDRESS, USER_ID, NTWK_YR_MO 
                        FROM INFOMATICS.TBL_OVERLAY_COREMATCH) AS CM
        INNER JOIN INFOMATICS.TEMP_CM_TINS2 AS TCM2
        ON CM.ADDRESS=TCM2.ADDRESS AND CM.ZIP=TCM2.ZIP AND CM.VTIN=TCM2.VTIN
        WHERE LEFT(TCM2.BESTMATCHSCORE,INSTR(TCM2.BESTMATCHSCORE,':') -1) >= 6 AND (TCM2.VTIN IS NOT NULL OR TCM2.VTIN <> '')   
        AND CM.USER_ID = CURR_USER 
        AND CM.NTWK_YR_MO = NETWORK_YEAR_MO) WITH DATA;


        --DoCmd.RunSQL "update coreMatch as A INNER JOIN tempCM_TINS_LiveCntrs as B on A.vExtCTR_PRV_NO = B.vExtCTR_PRV_NO set A.CTRNO = B.PPONAT_CN, A.CTR_MATCH_CD = 'addr, zip & p TIN', A.ctr_match_score = B.BestMatchScore"

        MERGE INTO INFOMATICS.TBL_OVERLAY_COREMATCH AS CM
        USING (SELECT CTRNO, PPONAT_CN, BESTMATCHSCORE, USER_ID, NTWK_YR_MO FROM  INFOMATICS.TEMP_CM_TINS_LIVECNTRS) AS TCTL
        ON CM.VEXTCTR_PRV_NO=TCTL.VEXTCTR_PRV_NO
            AND CM.USER_ID =TCTL.USER_ID
            AND CM.NTWK_YR_MO=TCTL.NTWK_YR_MO
            AND CM.USER_ID = CURR_USER
            AND CM.NTWK_YR_MO = NETWORK_TEAR_MONTH
        WHEN MATCHED THEN
        UPDATE SET CM.CTRNO = TCTL.PPONAT_CN, CM.CTR_MATCH_CD = 'addr, zip & p TIN', CM.CTR_MATCH_SCORE=TCTL.BESTMATCHSCORE;

        -- 5) EXACT match ON TIN, ZIP5 AND distance match <3 ON Address1

        --DoCmd.RunSQL "UPDATE coreMatch as A INNER JOIN tblLiveCenters as B ON A.vTIN=B.CtaxID AND A.ZIP=B.ZIP AND ld(trim(A.ADDRESS),trim(B.ADDRESS))>0 AND ld(trim(A.ADDRESS), trim(B.ADDRESS))<3 SET A.CTRNO = B.ctrno, A.CTR_MATCH_CD = 'TIN, addr LD<3,zip' WHERE len(A.CTRNO)=0 and len(a.vTIN)>0" */

        MERGE INTO INFOMATICS.TBL_OVERLAY_COREMATCH AS CM
        USING (SELECT CTRNO, CTAXID, ADDRESS, ZIP FROM INFOMATICS.TBL_OVERLAY_TBL_LIVECENTERS) AS LC
        ON CM.VTIN=LC.CTAXID 
        AND CM.ZIP=LC.ZIP
        AND DNOAEDW.LD(TRIM(CM.ADDRESS),TRIM(LC.ADDRESS))>0 AND DNOAEDW.LD(TRIM(CM.ADDRESS), TRIM(LC.ADDRESS))<3
        AND LENGTH(CM.CTRNO)=0 AND LENGTH(CM.vTIN)>0
        AND CM.USER_ID = CURR_USER
        AND CM.NTWK_YR_MO = NETWORK_YEAR_MONTH
        WHEN MATCHED THEN
        UPDATE SET CM.CTRNO = LC.CTRNO, CM.CTR_MATCH_CD = 'TIN, addr LD<3,zip';

        --Apply center name in coreMatch from tblLiveCenters where match found but no center name provided
       -- "Filling in Missing Center Names where match found..."
        --DoCmd.RunSQL "UPDATE coreMatch as A INNER JOIN tblLiveCenters as B on A.CTRNO=B.CTRNO SET A.vCNAME=B.CNAME WHERE (A.vCNAME is null or A.vCNAME = '')" */

        MERGE INTO INFOMATICS.TBL_OVERLAY_COREMATCH AS CM
        USING (SELECT CTRNO, CNAME FROM INFOMATICS.TBL_OVERLAY_TBL_LIVECENTERS) AS LC
        ON CM.CTRNO=LC.CTRNO
            AND (A.vCNAME IS NULL OR A.vCNAME = '')
            AND CM.USER_ID = CURR_USER
            AND CM.NTWK_YR_MO = NETWORK_YEAR_MONTH
        WHEN MATCHED THEN
        UPDATE SET CM.VCNAME=LC.CNAME;

        DROP TABLE INFOMATICS.TEMP_CM_TINS1;
        DROP TABLE INFOMATICS.TEMP_CM_TINS2;
        DROP TABLE INFOMATICS.TEMP_CM_TINS_LIVECNTRS;


    END  ; 

GRANT ALL   
ON SPECIFIC PROCEDURE INFOMATICS.PROC_OVERLAY_RNTL_NTWK_MATCHING 
TO HMO38 WITH GRANT OPTION ; 

GRANT ALL
ON SPECIFIC PROCEDURE INFOMATICS.PROC_OVERLAY_RNTL_NTWK_MATCHING 
TO HMO50 WITH GRANT OPTION ; 

GRANT ALL   
ON SPECIFIC PROCEDURE INFOMATICS.PROC_OVERLAY_RNTL_NTWK_MATCHING 
TO HMO52 WITH GRANT OPTION ;


Thanks for any help!

John
...