使用SQLDeveloper上的PL / SQL,使用来自其他两个表的数据插入表中

时间:2015-04-07 09:06:11

标签: plsql plsqldeveloper

我正在编写一个PL / SQL过程,我需要根据两个不同表中两列的相等性插入表中。

这是我的代码:

create or replace PROCEDURE insertSomething
IS
BEGIN
  INSERT INTO MYDBP ( ZIP )
  SELECT POSTCODE
  FROM ZIPDBP
  WHERE ZIPDBP.ZIP = OTHERDBP.ZIP;
  COMMIT;
END;

我收到一条错误,说OTHERDBP.ZIP是一个无效的标识符。有什么问题?

编辑:

为了获得我预期的输出,我需要在两个表ID之间使用另一个相等的语句,但我再次获得无效的标识符,这次是DBP_CLIENTS.ID。这是代码

INSERT INTO DBP_CLIENTS ( POSTCODE )
SELECT POSTCODE
FROM DBP_POSTCODE, HELENS_DATA
WHERE DBP_POSTCODE.LOCALITY = HELENS_DATA.SUBURB
AND DBP_POSTCODE.STATE = 'NSW'
AND DBP_CLIENTS.ID = HELENS_DATA.ID;
COMMIT;

2 个答案:

答案 0 :(得分:2)

试试这个:

create or replace PROCEDURE insertSomething
IS
BEGIN
    INSERT INTO MYDBP ( ZIP )
        SELECT POSTCODE
    FROM ZIPDBP, OTHERDBP
    WHERE ZIPDBP.ZIP = OTHERDBP.ZIP;
    COMMIT;
END;

您必须将otherdbp添加到from部分。而且您不需要在过程声明中使用()。 此外,insert是pl / sql中的保留字,因此过程必须具有不同的名称

答案 1 :(得分:0)

您必须在FROM子句中添加DBP_CLIENTS:

 INSERT INTO DBP_CLIENTS ( POSTCODE )
 SELECT POSTCODE
 FROM DBP_POSTCODE, HELENS_DATA, DBP_CLIENTS
  WHERE DBP_POSTCODE.LOCALITY = HELENS_DATA.SUBURB
  AND DBP_CLIENTS.ID = HELENS_DATA.ID
  AND DBP_POSTCODE.STATE = 'NSW';
 COMMIT;