FW4202_Trim_SRCH_CHAR_VAL.sql 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. SPOOL TRIM_SRCH_CHAR_VAL.sql
  2. SET SERVEROUTPUT ON;
  3. SET FEEDBACK OFF;
  4. DECLARE
  5. v_tbl_name varchar2(30);
  6. v_fld_name varchar2(30);
  7. v_key varchar2(30);
  8. v_check number(1);
  9. v_precision NUMBER(20,0);
  10. cursor cursor_1 is
  11. WITH A12 AS
  12. (SELECT DISTINCT A.TBL_NAME MAIN1 ,B.TBL_NAME CHAR1,B1.KEY_TYPE_FLG FROM CI_MD_MO_TBL A, CI_MD_MO_TBL B, CI_MD_TBL B1
  13. WHERE TRIM(B.TBL_NAME) IN (SELECT TABLE_NAME FROM USER_TAB_COLUMNS WHERE COLUMN_NAME = 'SRCH_CHAR_VAL'
  14. AND DATA_TYPE = 'VARCHAR2')
  15. AND A.MAINT_OBJ_CD = B.MAINT_OBJ_CD
  16. AND A.TBL_NAME = B1.TBL_NAME
  17. AND A.TBL_ROLE_FLG = 'PRIM')
  18. (SELECT F.CHAR1,CASE CHAR1 WHEN 'SC_USER_CHAR' THEN 'USR' ELSE DECODE(SUBSTR(TRIM(D.FLD_NAME),-2,2),'ID','RNDM','USR') END KEY,D.FLD_NAME,FLD_PRECISION
  19. FROM CI_MD_CONST C, CI_MD_CONST_FLD D, CI_MD_FLD E, A12 F
  20. WHERE C.CONST_ID = D.CONST_ID
  21. AND C.TBL_NAME = F.MAIN1
  22. AND D.FLD_NAME = E.FLD_NAME
  23. AND C.CONST_TYPE_FLG = 'PK'
  24. AND D.FLD_NAME IN (SELECT p.FLD_NAME FROM CI_MD_CONST_FLD p WHERE p.CONST_ID IN (SELECT q.CONST_ID FROM CI_MD_CONST q WHERE q.TBL_NAME = F.CHAR1 AND q.CONST_TYPE_FLG = 'PK'))
  25. AND D.SEQ_NUM = 1
  26. UNION
  27. SELECT F.CHAR1,CASE CHAR1 WHEN 'SC_USER_CHAR' THEN 'USR' ELSE DECODE(SUBSTR(TRIM(D.FLD_NAME),-2,2),'ID','RNDM','USR') END KEY,D.FLD_NAME,FLD_PRECISION
  28. FROM CI_MD_CONST C, CI_MD_CONST_FLD D, CI_MD_FLD E, A12 F
  29. WHERE C.CONST_ID = D.CONST_ID
  30. AND C.TBL_NAME = F.CHAR1
  31. AND D.FLD_NAME = E.FLD_NAME
  32. AND C.CONST_TYPE_FLG = 'PK'
  33. AND D.FLD_NAME not IN (SELECT p.FLD_NAME FROM CI_MD_CONST_FLD p WHERE p.CONST_ID IN (SELECT q.CONST_ID FROM CI_MD_CONST q WHERE q.TBL_NAME = F.MAIN1 AND q.CONST_TYPE_FLG = 'PK'))
  34. AND D.SEQ_NUM = 1);
  35. BEGIN
  36. SELECT count(1) INTO v_check FROM CI_UT_INSTL_DTL
  37. WHERE SCRIPT_FILE_NAME = 'FW4202_TRIM_SRCH_CHAR_VAL.SQL'
  38. AND END_DTTM IS NOT NULL;
  39. if (v_check = 1) THEN
  40. DBMS_OUTPUT.PUT_LINE('########################################################################');
  41. DBMS_OUTPUT.PUT_LINE('Script has already executed once in your environment. No need to re-run.');
  42. DBMS_OUTPUT.PUT_LINE('########################################################################');
  43. return;
  44. else
  45. INSERT INTO CI_UT_INSTL
  46. (INSTL_LOG_ID,TARGET_VER_ID,UPG_COUNT,PREV_VER_ID,START_DTTM,END_DTTM,RUN_STATUS_FLG,VERSION,SR_NO,OWNER_FLG) SELECT MAX(INSTL_LOG_ID)+1,'V4.2.0.2.0',1,'V4.2.0.2.0',SYSDATE,SYSDATE,'02',1,'*','F1' FROM CI_UT_INSTL;
  47. INSERT INTO CI_UT_INSTL_DTL
  48. (INSTL_LOG_ID,SEQ_NUM,SCRIPT_FILE_NAME,START_DTTM,END_DTTM,RUN_STATUS_FLG,VERSION,OWNER_FLG) SELECT MAX(INSTL_LOG_ID)+1,1,'FW4202_TRIM_SRCH_CHAR_VAL.SQL',SYSDATE,SYSDATE,'02',1,'F1' FROM CI_UT_INSTL_DTL;
  49. END IF;
  50. open cursor_1;
  51. loop
  52. fetch cursor_1 into v_tbl_name,v_key,v_fld_name,v_precision;
  53. exit when cursor_1%notfound;
  54. if ( v_key = 'RNDM') THEN
  55. FOR A1 IN 0..9 LOOP
  56. DBMS_OUTPUT.PUT_LINE('UPDATE '||v_tbl_name||' A SET A.SRCH_CHAR_VAL = TRIM(A.SRCH_CHAR_VAL) WHERE A.'||v_fld_name||' BETWEEN ''' || RPAD(A1,v_precision,0) || ''' AND ''' || RPAD(A1,v_precision,9) ||''' AND A.CHAR_TYPE_CD = ( SELECT B.CHAR_TYPE_CD FROM CI_CHAR_TYPE B WHERE A.CHAR_TYPE_CD = B.CHAR_TYPE_CD AND (B.CHAR_TYPE_FLG = ''DFV'' OR ( B.CHAR_TYPE_FLG = ''FKV'' AND B.FK_REF_CD IN (SELECT T1.FK_REF_CD FROM CI_FK_REF T1, CI_MD_TBL T2 WHERE T1.TBL_NAME = T2.TBL_NAME AND T1.FK_REF_CD = B.FK_REF_CD AND T2.KEY_TYPE_FLG = ''USR'') ) )) AND TRIM(A.SRCH_CHAR_VAL) IS NOT NULL;');
  57. DBMS_OUTPUT.PUT_LINE('COMMIT;');
  58. DBMS_OUTPUT.PUT_LINE(chr(13)||chr(10));
  59. END LOOP;
  60. else
  61. DBMS_OUTPUT.PUT_LINE('UPDATE '||v_tbl_name||' A SET A.SRCH_CHAR_VAL = TRIM(A.SRCH_CHAR_VAL) WHERE A.CHAR_TYPE_CD = ( SELECT B.CHAR_TYPE_CD FROM CI_CHAR_TYPE B WHERE A.CHAR_TYPE_CD = B.CHAR_TYPE_CD AND (B.CHAR_TYPE_FLG = ''DFV'' OR ( B.CHAR_TYPE_FLG = ''FKV'' AND B.FK_REF_CD IN (SELECT T1.FK_REF_CD FROM CI_FK_REF T1, CI_MD_TBL T2 WHERE T1.TBL_NAME = T2.TBL_NAME AND T1.FK_REF_CD = B.FK_REF_CD AND T2.KEY_TYPE_FLG = ''USR'') ) )) AND TRIM(A.SRCH_CHAR_VAL) IS NOT NULL;');
  62. DBMS_OUTPUT.PUT_LINE('COMMIT;');
  63. DBMS_OUTPUT.PUT_LINE(chr(13)||chr(10));
  64. END IF;
  65. END LOOP;
  66. close cursor_1;
  67. DBMS_OUTPUT.PUT_LINE('EXIT;');
  68. end;
  69. /
  70. spool off;
  71. exit;