CREATE OR REPLACE PROCEDURE ABC ( REG_NO IN CO_ENROLMENT.S_REGNO%TYPE,
TERM IN COURSEOFFERING.CO_TERMNUMBER%TYPE,
YEAR IN COURSEOFFERING.CO_YEAR%TYPE,
CO_TITLE IN COURSE.C_TITLE%TYPE,
EN_DATE OUT CO_ENROLMENT.COE_ENROLDATE%TYPE,
COM_ST OUT CO_ENROLMENT.COE_COMPLETIONSTATUS%TYPE)
AS
BEGIN
SELECT M.COE_COMPLETIONSTATUS, M.COE_ENROLDATE
INTO COM_ST, EN_DATE
FROM COURSEOFFERING O
INNER JOIN COURSE C
ON C.C_ID = O.C_ID
INNER JOIN CO_ENROLMENT M
ON M.CO_ID = O.CO_ID
WHERE M.S_REGNO LIKE REG_NO AND
O.CO_TERMNUMBER LIKE TERM AND
O.CO_YEAR LIKE YEAR AND
C.C_TITLE LIKE CO_TITLE;
END ABC;
I have written down above procedure.
Below is PL/SQL block to call above procedure,
DECLARE
COMPL_STATUS CO_ENROLMENT.COE_COMPLETIONSTATUS%TYPE;
ENROL_DATE CO_ENROLMENT.COE_ENROLDATE%TYPE;
BEGIN
ABC (44444444, 2009, 2, 'PLSQL Programming',
EN_DATE => enrol_date, COM_ST =>compl_status);
DBMS_OUTPUT.PUT_LINE ('STUDENT COMPLETION STATUS AND ENROLMENT DATE IS '
|| ENROL_DATE
|| ' '
|| compl_status );
END;
It returns me error as no data found, but when I run query separately I get the output. I couldn’t figure out what is wrong. Did I wrote procedure block correctly and Parameters passed in PL/SQL block are correct?
You’re calling your stored procedure incorrectly. You have to specify parameters in the correct order, or use named parameter notation, ie
or
You can see that if you use named parameter notation you can specify parameters in a different order (or not at all if the parameters have DEFAULT values).