插入table1 select * from other table2,然后从table2中删除该行

时间:2017-07-05 11:10:51

标签: sql oracle function stored-procedures plsql

我试图将行插入table1 select * from table2,最后使用oracle sql developer中的函数从table2中删除行。我不知道怎么做。

以下是我的职能:

create or replace FUNCTION DELETEROW(GODOWN_DIST_CODE IN 
TEST_TABLE.GODOWN_DIST_CODE%TYPE)  return varchar2
AS
returned_value varchar2(50);
BEGIN
begin
INSERT INTO TEST_TABLE_BACKUP SELECT * FROM TEST_TABLE WHERE 
GODOWN_DIST_CODE=GODOWN_DIST_CODE;
DELETE TEST_TABLE WHERE GODOWN_DIST_CODE = GODOWN_DIST_CODE;

INSERT INTO NEW_TABLE_BACKUP SELECT * FROM NEW_TABLE WHERE GODOWN_DIST_CODE 
= GODOWN_DIST_CODE;
DELETE FROM NEW_TABLE WHERE GODOWN_DIST_CODE = GODOWN_DIST_CODE;

exception
 WHEN no_data_found THEN
      returned_value := '#';
end;
RETURN returned_value;    
END;

2 个答案:

答案 0 :(得分:0)

试试这个: -

CREATE OR REPLACE PROCEDURE TABLE2_TO_TABLE1
  IS
  BEGIN
    EXECUTE IMMEDIATE 'INSERT INTO TABLE1(
              Field1,
              Field2,
              Field3
              )
            SELECT Field1,
                  Field2,
                  Field3
                  FROM TABLE2';
    EXECUTE IMMEDIATE 'DELETE TABLE2 where rownum != 0';
 END TABLE2_TO_TABLE1;

执行程序

BEGIN
    TABLE2_TO_TABLE1;
END;
/

答案 1 :(得分:0)

根据我们的讨论,我为您提出此解决方案。即使我没有发现需要FUNCTION使用FUNCTION显示exmaple。此外,我已将删除逻辑写入Procedure,并且根据删除语句的成功,Return值在变量var中被捕获,并作为OUT paramater发送给您可以使用。

功能:

CREATE OR REPLACE FUNCTION confirm_ckh
   RETURN VARCHAR
AS
BEGIN
   RETURN ('#');
END;

步骤:

CREATE OR REPLACE PROCEDURE DELETEROW (
   GODOWN_DIST_CODE   IN TEST_TABLE.GODOWN_DIST_CODE%TYPE,
   var OUT varchar2) <-- Out parameter to get the return value
AS

BEGIN
   BEGIN
      INSERT INTO TEST_TABLE_BACKUP
         SELECT *
           FROM TEST_TABLE
          WHERE GODOWN_DIST_CODE = GODOWN_DIST_CODE;

      IF SQL%ROWCOUNT > 0
      THEN
         DBMS_OUTPUT.put_line ('Insert Success TEST_TABLE_BACKUP');
         var:=confirm_ckh;
      END IF;

      DELETE TEST_TABLE
       WHERE GODOWN_DIST_CODE = GODOWN_DIST_CODE;

      IF SQL%ROWCOUNT > 0
      THEN
         DBMS_OUTPUT.put_line ('Deleted records from TEST_TABLE ');
         var:=confirm_ckh;
      END IF;


      INSERT INTO NEW_TABLE_BACKUP
         SELECT *
           FROM NEW_TABLE
          WHERE GODOWN_DIST_CODE = GODOWN_DIST_CODE;

      IF SQL%ROWCOUNT > 0
      THEN
         DBMS_OUTPUT.put_line ('Insert Success for NEW_TABLE_BACKUP');
         var:=confirm_ckh;
      END IF;

      DELETE FROM NEW_TABLE
            WHERE GODOWN_DIST_CODE = GODOWN_DIST_CODE;

      IF SQL%ROWCOUNT > 0
      THEN
         DBMS_OUTPUT.put_line ('Deleted records from NEW_TABLE ');
         var:=confirm_ckh;
      END IF;
   EXCEPTION
      WHEN NO_DATA_FOUND
      THEN
         null;
   END;
END;