我有这样的档案..。
SELECT COUNT(*) INTO L_COUNT
FROM AR_APPROVAL_USER_LIMITS
WHERE DOCUMENT_TYPE = 'CM'
AND CURRENCY_CODE = :AR_APPROVAL_USER_LIMITS.CURRENCY_CODE
AND REASON_CODE = :AR_APPROVAL_USER_LIMITS.REASON_CODE
AND PRIMARY_FLAG = :AR_APPROVAL_USER_LIMITS.PRIMARY_FLAG
AND ((AMOUNT_FROM BETWEEN :AR_APPROVAL_USER_LIMITS.AMOUNT_FROM AND
:AR_APPROVAL_USER_LIMITS.AMOUNT_TO)
OR (AMOUNT_TO BETWEEN :AR_APPROVAL_USER_LIMITS.AMOUNT_FROM AND
:AR_APPROVAL_USER_LIMITS.AMOUNT_TO)
OR ((AMOUNT_FROM <:AR_APPROVAL_USER_LIMITS.AMOUNT_FROM) AND
(AMOUNT_TO >:AR_APPROVAL_USER_LIMITS.AMOUNT_TO)))
AND USER_ID != :AR_APPROVAL_USER_LIMITS.USER_ID;
SELECT COUNT(*)
INTO L_COUNT
FROM AR_APPROVAL_USER_LIMITS
WHERE DOCUMENT_TYPE = 'CM'
AND CURRENCY_CODE = :AR_APPROVAL_USER_LIMITS.CURRENCY_CODE
AND REASON_CODE = :AR_APPROVAL_USER_LIMITS.REASON_CODE
AND USER_ID = :AR_APPROVAL_USER_LIMITS.USER_ID;
SELECT COUNT(*) INTO L_COUNT
FROM AR_APPROVAL_USER_LIMITS
WHERE DOCUMENT_TYPE = 'CM'
AND CURRENCY_CODE = :AR_APPROVAL_USER_LIMITS.CURRENCY_CODE
AND REASON_CODE = :AR_APPROVAL_USER_LIMITS.REASON_CODE
AND PRIMARY_FLAG = :AR_APPROVAL_USER_LIMITS.PRIMARY_FLAG
AND ((AMOUNT_FROM BETWEEN :AR_APPROVAL_USER_LIMITS.AMOUNT_FROM AND
:AR_APPROVAL_USER_LIMITS.AMOUNT_TO)
OR (AMOUNT_TO BETWEEN :AR_APPROVAL_USER_LIMITS.AMOUNT_FROM AND
:AR_APPROVAL_USER_LIMITS.AMOUNT_TO)
OR ((AMOUNT_FROM <:AR_APPROVAL_USER_LIMITS.AMOUNT_FROM) AND
(AMOUNT_TO >:AR_APPROVAL_USER_LIMITS.AMOUNT_TO))
);
DEF_WHERE := ADD_AND( DEF_WHERE ) || '((USER_ID) IN '||'(SELECT
USER_ID '||'FROM FND_USER WHERE '|| SUB_WHERE || '))';我需要过滤表名之间的距离和地点..。请帮忙..。提前谢谢..。
发布于 2016-04-28 08:24:45
假设您的输入位于a.txt文件中;下面是如何处理每个单词:
cat a.txt | tr -cs 'A-Za-z0-9_' '[\n*]' | tr -s '[:lower:]' '[:upper:]'第一部分只保留白体字符,并将每个字符放在一行上;第二部分确保所有内容都大写,以便于处理。
以上将只列出单词,每个字都列在一行:
SELECT
COUNT
INTO
L_COUNT
FROM
AR_APROVAL_USER_LIMITS
WHERE
DOCUMENT_TYPE
CM
AND
CURENCY_CODE
AR_APROVAL_USER_LIMITS
CURENCY_CODE
[....]然后,我们可以使用awk来处理这个流:读取每一行,如果从中找到,则只需编写以下行:
cat a.txt | tr -cs 'A-Za-z_' '[\n*]' | tr -s '[:lower:]' '[:upper:]' |\
awk ' {
if($0=="FROM") {p="FROM"}
else if (p=="FROM") {p="" ; print $0}
}'在您的投入下,这将提供:
AR_APROVAL_USER_LIMITS
AR_APROVAL_USER_LIMITS
AR_APROVAL_USER_LIMITS
FND_USER它符合你的要求。但是要小心,如果FROM和WHERE之间有多个表,就会错过它;所以您应该选择:
查找FROM,然后写到行为WHERE
cat a.txt | tr -cs 'A-Za-z_' '[\n*]' | tr -s '[:lower:]' '[:upper:]' |\
awk ' {
if($0=="FROM") {p="FROM"}
else if (p=="FROM" && $0!="WHERE") {print $0}
else {p=""}
}'也要小心,因为如果有sql-联接,这是行不通的。现在您知道了,也许您可以为这种情况寻找一个自己的解决方案。
https://stackoverflow.com/questions/36906019
复制相似问题