Я тестирую оператор выбора, содержащий выражение CASE, и мне нужно добавить WHILE / L OOP в одно из условий WHEN.
Логика c из этого оператора в конечном итоге будет включена внутри скрипта PL / SQL, но я хочу знать, что он работает на 100%, прежде чем я включу его в процедурный.
Logi c служит для запроса почтового индекса внутри XML пакет найден в столбце clob.
ПРЕДПОЛАГАЕМОЕ ДЕЙСТВИЕ:
, если ZIP> 5 цифр, затем удалить все после 5-го символа.
, если ZIP <5 цифр, затем добавить '0 'пока длина не достигнет 5 знаков. </p>
, иначе ничего не делать.
ЧТО НУЖНО:
Лог c, который добавляет' 0 ', используя функцию contact () Необходимо повторить, пока новый почтовый индекс не достигнет длины 5 символов. Как таковой, запрос добавляет только один '0', но это должно повторяться столько раз, сколько требуется для общей длины символа до = '5'. Все мои попытки добавить L OOP или WHILE приводят к неправильному форматированию в соответствии с Oracle SQL.
QUERY:
SELECT ORDER_NUMBER,
EXTRACTVALUE(xmltype(PACKAGE), '/Package/fCustomerVO/invoiceAddress/zip') as "ZIPS_INV",
LENGTH(EXTRACTVALUE(xmltype(PACKAGE), '/Package/fCustomerVO/invoiceAddress/zip')) as "ZIPS_LEN",
CASE
/* add digits to zip WHILE/LOOP NEEDED HERE */
WHEN LENGTH(EXTRACTVALUE(xmltype(PACKAGE), '/Package/fCustomerVO/invoiceAddress/zip')) < 5
THEN concat(EXTRACTVALUE(xmltype(PACKAGE), '/Package/fCustomerVO/invoiceAddress/zip'), '0')
/* subtract digits to zip */
WHEN LENGTH(EXTRACTVALUE(xmltype(PACKAGE), '/Package/fCustomerVO/invoiceAddress/zip')) > 5
THEN substr(EXTRACTVALUE(xmltype(PACKAGE), '/Package/fCustomerVO/invoiceAddress/zip'), 1, 5)
ELSE
'correct format'
END as "FIXED_ZIP"
FROM quarantine;