У меня есть вопросы, которые я пытаюсь решить, и найдите ниже то, что я решил до сих пор. хотя хранимая процедура не имеет ошибки, но вызывая ее, я получаю эту ошибку:
ОШИБКА в строке 2: ORA-06550: строка 2, столбец 3: PLS-00306: неверное число или типы аргументов в вызове to 'PUB_JOB_COUNT' ORA-06550: строка 2, столбец 3: PL / SQL: оператор игнорируется
Требование:
Создать сохраненный PL / SQL процедура объекта в базе данных. В процедуре должны быть указаны имя издателя, город, номер телефона и количество (количество) запрошенных им заданий в таблице PublisherDetails для каждого издателя, который запросил менее трех заданий на печать, в противном случае процедура должна отобразить на экране имя издателя по номеру работы, дате начала работы и дате завершения работы для каждой работы, которую он / она запрашивал. Вывод экрана (подсказка: используйте оператор конкатенации '||') должен быть в следующем формате:
Пожалуйста, кто-нибудь поможет мне, пожалуйста?
Имя издателя: Addison-Wesley
JobNo Start Date Completion Date
12 17-JAN-14 25-JAN-14
14 28-FEB-14 01-APR-14
Наконец, в разделе ИСКЛЮЧЕНИЕ должно учитываться исключение NO-DATA-FOUND, а на экране должно отображаться сообщение (подсказка: используйте процедуру DBMS_OUTPUT.put_line, предоставленную Oracle), информирующее пользователь, если такая ошибка возникает. Обратите внимание, что для того, чтобы DBMS_OUTPUT.put_line работал в SQL* Plus, сначала необходимо установить SERVEROUTPUT. Вы должны проверить, правильно ли выполняется процедура, вызвав ее и проверив содержимое таблицы PublisherDetails. Выполните следующие действия: a) Создайте файл сценария с необходимым кодом для создания таблицы PublisherDetails и процедуры PL / SQL в базе данных; б) Создайте второй файл сценария со следующим: • оператор SQL, который очищает содержимое таблицы PublisherDetails; • оператор анонимного блока PL / SQL для вызова (выполнения) процедуры PL / SQL; • Оператор SELECT для выбора всех записей в таблице PublisherDetails.
мои таблицы
publisher(publisherName, publisherCity, phoneNo)
pk
printJob(JobNo, startDate, complitionDate, publisherName)
pk fk(publisher)
publisherdetails(publisherName, publisherCity, phoneNo, JobNo)
pk
Код:
CREATE OR REPLACE PROCEDURE PUB_JOB_COUNT (
JOBNO IN NUMBER
) AS
PUBLISHERNAME PRINTJOB.PUBLISHERNAME%TYPE;
NOTFOUND EXCEPTION;
CURSOR PUBCURSOR IS
SELECT PUBLISHER.PUBLISHERNAME,
PUBLISHER.PUBLISHERCITY,
PUBLISHER.PHONENO,
PRINTJOB.STARTDATE,
PRINTJOB.COMPLETIONDATE,
SUM(JOBNO) AS NUMOFJOBS
FROM PUBLISHER
INNER JOIN PRINTJOB ON PUBLISHER.PUBLISHERNAME = PRINTJOB.PUBLISHERNAME
GROUP BY PUBLISHER.PUBLISHERNAME,
PUBLISHER.PUBLISHERCITY,
PUBLISHER.PHONENO,
PRINTJOB.STARTDATE,
PRINTJOB.COMPLETIONDATE;
PUBREC PUBCURSOR%ROWTYPE;
BEGIN
OPEN PUBCURSOR;
FOR PRINTJOB IN PUBCURSOR LOOP
PUBLISHERNAME := PRINTJOB.PUBLISHERNAME;
DBMS_OUTPUT.PUT_LINE('Publisher Name : ' || PRINTJOB.PUBLISHERNAME);
LOOP
FETCH PUBCURSOR INTO PUBREC;
EXIT WHEN PUBCURSOR%NOTFOUND;
IF PUBREC.NUMOFJOBS <= 3 THEN INSERT INTO PUBLISHERDETAILS VALUES (
PUBREC.PUBLISHERNAME,
PUBREC.PUBLISHERCITY,
PUBREC.PHONENO,
PUBREC.NUMOFJOBS
);
ELSE DBMS_OUTPUT.PUT_LINE(PUBREC.NUMOFJOBS
|| ' '
|| PUBREC.STARTDATE
|| ' '
|| PUBREC.COMPLETIONDATE);
END IF;
END LOOP;
END LOOP;
CLOSE PUBCURSOR;
COMMIT;
EXCEPTION
WHEN NOTFOUND THEN DBMS_OUTPUT.PUT_LINE('Record Not Found');
END;
На основании приведенных ниже комментариев код, используемый для выполнения процедуры:
BEGIN
pub_Job_Count;
End;