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;
/
我想 运行 一个 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;
/