PL/SQL:根据派生值插入 Table

PL/SQL: INSERT INTO Table Based On Derived Value

我想 运行 一个 SELECT 语句,导出一个值,然后将该值插入 table。我的代码看起来像这样:

CREATE OR REPLACE PROCEDURE ADDR 
  IS
  L_SQL_ERR_MSG   VARCHAR2 (250);

  CURSOR CUR_ADDRESSES
  IS         
  SELECT 
            CASE WHEN PPD.SP_ID ='11' 
                 THEN 'BILLING' 
                 WHEN PP_D.SP_ID ='157' 
                 THEN 'MAILING' 
                 ELSE NULL
                 END AS TYPE

            FROM
            SPEC_DEGREE PP_D
            WHERE PP_D.SP_ID ='11' --Currently just to extract one row
            AND PP_D.DEGREE ='DO';

 BEGIN
  FOR RCD IN CUR_ADDRESSES
  LOOP
     BEGIN
        INSERT INTO ADDITIONAL_ADDR (
                                   ID,
                                   NUM,
                                   STATE,
                                   START_DATE,
                                   TYPE)

             VALUES (
             '1',
             '12345',
             'CT',
             TO_DATE('01-01-2020', 'MM-DD-YYYY'),
             TYPE );

     EXCEPTION
        WHEN OTHERS
        THEN
           L_SQL_ERR_MSG := SQLERRM;

           DBMS_OUTPUT.put_line (SQLERRM);
     END;
  END LOOP;
END ADDR;
/

我现在知道我不能将列添加到插入语句中,但我希望有一种方法可以添加这个派生值。 PL/SQL 相当陌生。有什么想法吗?如果您需要更多详细信息,请告诉我。

您不需要光标:

CREATE OR REPLACE PROCEDURE ADDR
IS
BEGIN
  INSERT INTO ADDITIONAL_ADDR (
    ID,
    NUM,
    STATE,
    START_DATE,
    TYPE
  )
  SELECT '1',
         '12345',
         'CT',
         DATE '2020-01-01',
         CASE WHEN SP_ID ='11'  THEN 'BILLING' 
              WHEN SP_ID ='157' THEN 'MAILING' 
              END
  FROM   SPEC_DEGREE
  WHERE  SP_ID ='11' --Currently just to extract one row
  AND    DEGREE ='DO';
END ADDR;
/