Мы с коллегой пытаемся найти способ извлечения идентификатора сеанса в db2 и использовать его как способ идентификации записей, над которыми работали пользователи, чтобы они могли видеть только свои материалы. Мы делаем это в хранимой процедуре, которая будет вызываться интерфейсом MS Access. Мы определили лучший способ - использовать курсоры. У нас есть идея, но она не совсем работает и у нас есть пара вопросов.
- Как сделать курсор переменной хоста постоянным?
- Можно ли повторно открыть курсор без объявленияэто снова?
Вот код, который мы имеем до сих пор. Процесс завершается неудачей на шаге 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