Я написал хранимую процедуру, которая будет извлекать счетчики из таблиц, и если будет какое-либо несоответствие в счетчиках, будет выполнен некоторый sql-запрос для захвата пропущенного элемента.Вывод хранимой процедуры записывается в файл .txt с использованием utl_file.
При попытке скомпилировать процедуру я получаю сообщение об ошибке.
Примечание: я проверил другие записи, связанные с этимошибка, но я не могу понять, что пошло не так, как я только изучаю PL-SQL.Пожалуйста, предложите мне исправления, требуемые в коде.
create or replace PROCEDURE "PROC_TOTAL_EVENTS"
AS
file_handle utl_file.file_type;
utl_dir VARCHAR2(255) := '/u01/apps/Miscellaneous/bin'
counts NUMBER;
counts1 NUMBER;
counts2 NUMBER;
counts3 NUMBER;
missed_a NUMBER;
missed_b NUMBER;
missed_c VARCHAR2(50);
retrieved_buffer VARCHAR2(100);
BEGIN
file_handle := utl_file.fopen(utl_dir,'spool.txt','W');
dbms_output.put_line('File opened for write');
utl_file.put_line(file_handle, 'Executing the counts for total_events');
dbms_output.put_line('--------------------------------');
select /*+ PARALLEL(PH,8)) */ count(*) into counts from
cdb_admin.CPM_PREF_EVENT_STG;
utl_file.putf(file_handle, 'Total preference events sent to CPM from CDB',
counts);
dbms_output.put_line('1 step success');
SELECT COUNT(distinct cdb_pref_event_id) into counts1 FROM
cdb_admin.cpm_pref_result WHERE
cdb_pref_event_id IN (SELECT /*+ PARALLEL(PH,8)) */ cdb_pref_event_id FROM
cdb_admin.CPM_PREF_EVENT_STG ph;
utl_file.putf(file_handle, 'distinct count of total prefResults sent
by CPM to CDB', counts1);
dbms_output.put_line('2 step success');
Select count(distinct e.cdb_pref_event_id) Total_exception_count into
counts from
(Select distinct eh.cdb_customer_id cdb_customer_id,eh.cdb_pref_event_id
cdb_pref_event_id,eh.supp_cd supp_cd
from cdb_admin.CPM_PREF_EVENT_STG eh Left outer join
CDB_ADMIN.CPM_PREF_RESULT er on (eh.cdb_customer_id=er.cdb_customer_id and
eh.cdb_pref_event_id=er.cdb_pref_event_id)
where er.cdb_pref_event_id is null and er.cdb_customer_id is null) r join
CDB_ADMIN.cpm_pref_event_exception e
on (r.cdb_customer_id=e.cdb_customer_id and
r.cdb_pref_event_id=e.cdb_pref_event_id) where e.supp_cd != 'PROFILE-NOT-
FOUND';
utl_file.putf(file_handle, 'distinct count of total exceptions sent by CPM
to CDB', counts2);
dbms_output.put_line('3 step success');
Select count(distinct e.cdb_pref_event_id),e.supp_cd from
(Select distinct eh.cdb_customer_id cdb_customer_id,eh.cdb_pref_event_id
cdb_pref_event_id,eh.supp_cd supp_cd
from (select * from cdb_admin.CPM_PREF_EVENT_STG) eh Left outer join
CDB_ADMIN.CPM_PREF_RESULT er on (eh.cdb_customer_id=er.cdb_customer_id and
eh.cdb_pref_event_id=er.cdb_pref_event_id)
where er.cdb_pref_event_id is null and er.cdb_customer_id is null) r join
CDB_ADMIN.cpm_pref_event_exception e
on (r.cdb_customer_id=e.cdb_customer_id and
r.cdb_pref_event_id=e.cdb_pref_event_id) group by e.supp_cd;
utl_file.putf(file_handle, 'Counts bifurcation', counts3);
dbms_output.put_line('4 step success');
IF counts = (counts1+counts2) THEN
utl_file.putf(file_handle, 'Counts are matching', counts,
(counts1+counts2));
ELSE
dbms_output.put_line('Counts are not matching, finding the missed
record');
SELECT DISTINCT r.cdb_customer_id, r.cdb_pref_event_id,r.supp_cd into
missed_a,missed_b,missed_c
FROM
(
SELECT DISTINCT
eh.cdb_customer_id cdb_customer_id,
eh.cdb_pref_event_id cdb_pref_event_id,
eh.supp_cd supp_cd
FROM
(select * from cdb_admin.CPM_PREF_EVENT_STG eh
LEFT OUTER JOIN cdb_admin.cpm_pref_result er ON (
eh.cdb_customer_id = er.cdb_customer_id
AND
eh.cdb_pref_event_id = er.cdb_pref_event_id )
WHERE
er.cdb_pref_event_id IS NULL
AND er.cdb_customer_id IS NULL
) r
LEFT OUTER JOIN cdb_admin.cpm_pref_event_exception e ON (
r.cdb_customer_id = e.cdb_customer_id
AND r.cdb_pref_event_id = e.cdb_pref_event_id ) WHERE
e.cdb_pref_event_id IS NULL AND e.cdb_customer_id IS NULL;
utl_file.putf(file_handle, 'missed record ID and country code',
missed_a,missed_b,missed_c);
END IF;
utl_file.fclose(file_handle);
dbms_output.put_line('File closed');
file_handle := utl_file.fopen(utl_dir,'TotEvents.txt','R');
dbms_output.put_line('File opened for read');
utl_file.get_line(file_handle, retrieved_buffer);
dbms_output.put_line('Read success');
dbms_output.put_line(retrieved_buffer);
utl_file.fclose(file_handle);
dbms_output.put_line('File closed');
EXCEPTION
WHEN NO_DATA_FOUND THEN
ROLLBACK;
RAISE;
dbms_output.put_line('No Data Found : Exception');
dbms_output.put_line('Errorcode: ' || sqlcode || ' Error message: ' || sqlerrm);
WHEN TOO_MANY_ROWS THEN
ROLLBACK;
RAISE;
dbms_output.put_line('Too Many Rows : Exception');
dbms_output.put_line('Errorcode: ' || sqlcode || ' Error message: ' || sqlerrm);
WHEN OTHERS THEN
ROLLBACK;
RAISE;
dbms_output.put_line('Others : Eception');
dbms_output.put_line('Errorcode: ' || sqlcode || ' Error message: ' || sqlerrm);
END;
Сведения об ошибке:
Ошибка (15,5): PLS-00103: Обнаружен символ "COUNTS" при ожиданииодно из следующих: * & = - +;</> at in - это остаток от мода не rem <> или! = или ~ => = <= <> и / или like2 like4 likec между ||член мультимножества submultiset