x
CREATE OR REPLACE PROCEDURE SRM_H_PROC(
EMPLID_OUT OUT VARCHAR2,
ACAD_CAREER_OUT OUT VARCHAR2,
ACAD_PROG_INOUT IN OUT VARCHAR2,
PROG_STATUS_OUT OUT VARCHAR2,
ADMIT_TERM_INOUT IN OUT VARCHAR2)
AS
CURSOR PROC2
IS
SELECT
A.EMPLID,
A.ACAD_CAREER,
A.ACAD_PROG,
A.PROG_STATUS,
A.ADMIT_TERM
FROM
PS_ACAD_PROG A
WHERE
A.ADMIT_TERM = ADMIT_TERM_INOUT
AND A.ACAD_PROG =ACAD_PROG_INOUT
AND A.EFFDT =
(
SELECT MAX(EFFDT) FROM PS_ACAD_PROG WHERE EMPLID=A.EMPLID
)
AND A.EFFSEQ=
(
SELECT
MAX(EFFSEQ)
FROM
PS_ACAD_PROG
WHERE
EMPLID =A.EMPLID
AND EFFDT=A.EFFDT
)
AND A.PROG_STATUS='AC';
BEGIN
FOR I IN PROC2
LOOP
IF ADMIT_TERM_INOUT='1701' THEN
INSERT
INTO
PS_SRM_H_PROC_TB VALUES
(
EMPLID_OUT,
ACAD_CAREER_OUT,
ACAD_PROG_INOUT,
PROG_STATUS_OUT,
ADMIT_TERM_INOUT
);
ELSE
DBMS_OUTPUT.PUT_LINE('HI DEAR, SAY HELLO TO ME.');
END IF;
END LOOP;
COMMIT;
END SRM_H_PROC;
Table output is like this when I pass acad_prog ‘BTRCS’ and admit_term ‘1701’ as input in procedure:
(NULL) (NULL) BTRCS (NULL) 1701
(NULL) (NULL) BTRCS (NULL) 1701
(NULL) (NULL) BTRCS (NULL) 1701
(NULL) (NULL) BTRCS (NULL) 1701
(NULL) (NULL) BTRCS (NULL) 1701
(NULL) (NULL) BTRCS (NULL) 1701
Advertisement
Answer
You need to use cursor
values in if
statement and in insert
statement like this:
FOR I IN PROC2
LOOP
IF I.ADMIT_TERM ='1701' THEN
INSERT
INTO
PS_SRM_H_PROC_TB VALUES
(
I.EMPLID,
I.ACAD_CAREER,
I.ACAD_PROG,
I.PROG_STATUS,
I.ADMIT_TERM
);
ELSE
DBMS_OUTPUT.PUT_LINE('HI DEAR, SAY HELLO TO ME.');
END IF;
END LOOP;
This can also be done using insert into .. select ..
(without cursor
) as following:
CREATE OR REPLACE PROCEDURE SRM_H_PROC(
EMPLID_OUT OUT VARCHAR2,
ACAD_CAREER_OUT OUT VARCHAR2,
ACAD_PROG_INOUT IN OUT VARCHAR2,
PROG_STATUS_OUT OUT VARCHAR2,
ADMIT_TERM_INOUT IN OUT VARCHAR2)
AS
BEGIN
INSERT
INTO
PS_SRM_H_PROC_TB
SELECT
A.EMPLID,
A.ACAD_CAREER,
A.ACAD_PROG,
A.PROG_STATUS,
A.ADMIT_TERM
FROM
PS_ACAD_PROG A
WHERE
A.ADMIT_TERM = ADMIT_TERM_INOUT
AND A.ACAD_PROG =ACAD_PROG_INOUT
AND A.EFFDT =
(
SELECT MAX(EFFDT) FROM PS_ACAD_PROG WHERE EMPLID=A.EMPLID
)
AND A.EFFSEQ=
(
SELECT
MAX(EFFSEQ)
FROM
PS_ACAD_PROG
WHERE
EMPLID =A.EMPLID
AND EFFDT=A.EFFDT
)
AND A.PROG_STATUS='AC'
AND A.ADMIT_TERM ='1701';
COMMIT;
END SRM_H_PROC;
Cheers!!