RegEx для удаления одной и нескольких строк комментариев и пробелов за исключением подсказок - PullRequest
1 голос
/ 12 мая 2019

Как извлечь код Plsql, удалив одну и несколько строк комментариев и пробелы в начале / конце, но не удалив подсказки Oracle?

На самом деле я хочу извлечь DDL вида и добавить новый столбец в представления и восстановить вид динамически. Но некоторые из представлений очень сложны (большой размер) и имеют много пробелов, однострочных комментариев, многострочных комментариев и подсказок.

select text 
from All_views
where owner = 'Schema_name'
  and view_name = 'View1';

Я изначально думал применить регулярное выражение Oracle, но он также удаляет подсказки.

Кто-нибудь может подсказать мне, как этого добиться?

ПОЛЬЗОВАТЕЛЬ хочет оставить сообщение в этой строке комментария, добавив новое поле в представления. Так как для них это очень бесит.

Синтаксис моего просмотра:

Select /*+LEADING  ACL VS TXN  ACT TTY SEC SECID SHR_UDF*/ 
                        TXN_ID,
                        /****  IF  YOU ADD COL CHECK OUT THE TEMP TABLE NAME****/
                        /****  IF  YOU ADD COL CHECK OUT THE TEMP1 TABLE NAME****/
                        /****  IF  YOU ADD COL CHECK OUT THE TEMP2 TABLE NAME****/
                        /****  IF  YOU ADD COL CHECK OUT THE TEMP3 TABLE NAME****/
                        /****  IF  YOU ADD COL CHECK OUT THE TEMP4 TABLE NAME****/
                        /****  IF  YOU ADD COL CHECK OUT THE TEMP5 TABLE NAME****/
                        /****  IF  YOU ADD COL CHECK OUT THE TEMP6 TABLE NAME****/
                        /****  IF  YOU ADD COL CHECK OUT THE TEMP7 TABLE NAME****/
                        /****  IF  YOU ADD COL CHECK OUT THE TEMP8 TABLENAME****/
                        /****SELECT * FROM  ALL_TAB_COLUMN****/
                        /****  wHERE COLUMN_NAME=COL2****/
                        /****  gROUP BY TABLE_NAME***/
                        /****  oRDER BY1****/
                        /* CHANGE  JIRA1234 STARTS*/
                        ACL.aCCOUNT_NUMBER,
                        /* CHANGE  JIRA1234 ENDS*/
                        TXN.  TXN_SALE_dATE,
                        TXN.TXN_iNVOICE_DATE,
                        TXN.  TXN_pUBLISH_DATE,
                        ACL.TXN_EXCH_DATE,
                        ACL.SALES_DATE,
                        ACL.pRICE_DATE,
                        --ACL.LAST_UPDATED,
                        TTY.TTY_TTY_TYPE_ID,
                        /* CHANGE  JIRA7890 STARTS*/
                        TXN.ACL_OPEM_ENTRY_NO,
                        /* CHANGE  JIRA7890 eNDS*/
                        FROM  SCHEMA.aCCOUNT_MASTER  ACL
                        JOIN  SCHEMA.TXN_MASTER TXN
                        ON ACL.BRANCH_CD=TXN.BRANCH_CD
                        AND ACL.aCCOUNT_NO=TXN.aCCOUNT_NO
                        JOIN SCHEMA.TXN_TYPE_MASTER  TTY
                        ON  TXN.TTY_TYPE_ID=TTY.TTY_TYPE_ID
                        AND  TTY.SCE_ID=TXN_SEC_ID';

Заранее спасибо

1 Ответ

0 голосов
/ 13 мая 2019

Ваш вопрос не совсем ясен, но я постараюсь ответить на первый вопрос "Как извлечь код Plsql, удалив одну и несколько строк комментариев и пробелы в начале / конце, но не удаляя подсказки Oracle?"

Я думаю, что вы выбрали правильный путь с использованием регулярных выражений, ниже будут удалены все комментарии без подсказки.

select  regexp_replace('Create Or Replace Force view Schema_name.View1 as
                        Select /*+LEADING  ACL VS TXN  ACT TTY SEC SECID SHR_UDF*/ 
                        TXN_ID,
                        /****  IF  YOU ADD COL CHECK OUT THE TEMP TABLE NAME****/
                        /****  IF  YOU ADD COL CHECK OUT THE TEMP1 TABLE NAME****/
                        /****  IF  YOU ADD COL CHECK OUT THE TEMP2 TABLE NAME****/
                        /****  IF  YOU ADD COL CHECK OUT THE TEMP3 TABLE NAME****/
                        /****  IF  YOU ADD COL CHECK OUT THE TEMP4 TABLE NAME****/
                        /****  IF  YOU ADD COL CHECK OUT THE TEMP5 TABLE NAME****/
                        /****  IF  YOU ADD COL CHECK OUT THE TEMP6 TABLE NAME****/
                        /****  IF  YOU ADD COL CHECK OUT THE TEMP7 TABLE NAME****/
                        /****  IF  YOU ADD COL CHECK OUT THE TEMP8 TABLENAME****/
                        /****SELECT * FROM  ALL_TAB_COLUMN****/
                        /****  wHERE COLUMN_NAME=COL2****/
                        /****  gROUP BY TABLE_NAME***/
                        /****  oRDER BY1****/
                        /* CHANGE  JIRA1234 STARTS*/
                        ACL.aCCOUNT_NUMBER,
                        /* CHANGE  JIRA1234 ENDS*/
                        TXN.  TXN_SALE_dATE,
                        TXN.TXN_iNVOICE_DATE,
                        TXN.  TXN_pUBLISH_DATE,
                        ACL.TXN_EXCH_DATE,
                        ACL.SALES_DATE,
                        ACL.pRICE_DATE,
                        --ACL.LAST_UPDATED,
                        TTY.TTY_TTY_TYPE_ID,
                        /* CHANGE  JIRA7890 STARTS*/
                        TXN.ACL_OPEM_ENTRY_NO,
                        /* CHANGE  JIRA7890 eNDS*/
                        FROM  SCHEMA.aCCOUNT_MASTER  ACL
                        JOIN  SCHEMA.TXN_MASTER TXN
                        ON ACL.BRANCH_CD=TXN.BRANCH_CD
                        AND ACL.aCCOUNT_NO=TXN.aCCOUNT_NO
                        JOIN SCHEMA.TXN_TYPE_MASTER  TTY
                        ON  TXN.TTY_TYPE_ID=TTY.TTY_TYPE_ID
                        AND  TTY.SCE_ID=TXN_SEC_ID', '/\*\*.+\*\*/\s+|/\*\s.+\*/\s+|--.+\s+', '', 1, 0) from dual;

Вывод

Create Or Replace Force view Schema_name.View1 
as 
Select /*+LEADING  ACL VS TXN  ACT TTY SEC SECID SHR_UDF*/ TXN_ID, 
ACL.aCCOUNT_NUMBER, 
TXN.  TXN_SALE_dATE, 
TXN.TXN_iNVOICE_DATE, 
TXN.  TXN_pUBLISH_DATE, 
ACL.TXN_EXCH_DATE, 
ACL.SALES_DATE, 
ACL.pRICE_DATE, 
TTY.TTY_TTY_TYPE_ID, 
TXN.ACL_OPEM_ENTRY_NO, 
FROM  SCHEMA.aCCOUNT_MASTER  ACL 
JOIN  SCHEMA.TXN_MASTER TXN 
ON ACL.BRANCH_CD=TXN.BRANCH_CD 
AND ACL.aCCOUNT_NO=TXN.aCCOUNT_NO 
JOIN SCHEMA.TXN_TYPE_MASTER  TTY 
ON  TXN.TTY_TYPE_ID=TTY.TTY_TYPE_ID 
AND  TTY.SCE_ID=TXN_SEC_ID
...