这是在自定义表中插入空值的过程吗?

问题描述 投票:0回答:1
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;

当我通过acad_prog'BTRCS'和admit_term'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
(NULL)  (NULL)  BTRCS   (NULL)  1701

创建或替换过程SRM_H_PROC(EMPLID_OUT OUT VARCHAR2,ACAD_CAREER_OUT OUT VARCHAR2,ACAD_PROG_INOUT OUT VARCHAR2,PROG_STATUS_OUT OUT VARCHAR2,ADMIT_TERM_INOUT ......]

您需要在cursor语句和if语句中使用insert值,如下所示:
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;
干杯!
sql oracle plsql plsqldeveloper
1个回答
0
投票
干杯!
© www.soinside.com 2019 - 2024. All rights reserved.