oracleマルチテーブル関連削除の2つの方法


前回の文章を修正して、ネット上の友达はこの博文に対して意见を出して、とても中肯で、前回は転载しましたが、私も私の専门ではないことをおわびします.今回はオリジナルで、すべての内容が書き換えられ、検証されました.

        ,p_DropTable               ,       ,      。
CALL p_DropTable('T_DB');
CALL p_DropTable('T_DESC');

--   T_DB ,              
CREATE TABLE T_DB AS
SELECT FID,FPNAME,FCO FROM
(
  SELECT  0 FID,'' FPNAME,'' FCO                     FROM DUAL UNION ALL
  SELECT  1,'ORACLE',       'ORACLE'                 FROM DUAL UNION ALL
  SELECT  2,'MySQL',        'ORACLE'                 FROM DUAL UNION ALL
  SELECT  3,'PostgreSQL',   'UC Berkeley'            FROM DUAL UNION ALL
  SELECT  4,'SQL SERVER',   'Microsoft'              FROM DUAL UNION ALL
  SELECT  5,'MongoDB',      'MongoDB'                FROM DUAL UNION ALL
  SELECT  6,'Redis',        'Redis'                  FROM DUAL UNION ALL
  SELECT  7,'Elasticsearch','Elasticsearch'          FROM DUAL UNION ALL
  SELECT  8,'Neo4j',        'Neo4j'                  FROM DUAL UNION ALL
  SELECT  9,'Cassandra',    'Cassandra'              FROM DUAL UNION ALL
  SELECT 10,'SQLite',       'D. Richard Hipp'        FROM DUAL UNION ALL
  SELECT 11,'OceanBase',    'OceanBase'              FROM DUAL UNION ALL
  SELECT 12,'DB2',          'IBM'                    FROM DUAL UNION ALL
  SELECT 13,'SYBASE',       'SYBASE'                 FROM DUAL UNION ALL
  SELECT 14,'Informix',     'IBM'                    FROM DUAL UNION ALL
  SELECT 15,'ACCESS',       'Microsoft'              FROM DUAL UNION ALL
  SELECT 16,'FoxPro',       'Microsoft'              FROM DUAL
);
--   T_DESC ,          
CREATE TABLE T_DESC AS
SELECT FID,FDESC FROM
(
  SELECT  0 FID,'' FDESC                                        FROM DUAL UNION ALL
  SELECT  1,'         '                                FROM DUAL UNION ALL
  SELECT  2,'         '                                FROM DUAL UNION ALL
  SELECT  3,'           '                            FROM DUAL UNION ALL
  SELECT  4,'Windows       '                             FROM DUAL UNION ALL
  SELECT  5,'                   '            FROM DUAL UNION ALL
  SELECT  6,'           '                            FROM DUAL UNION ALL
  SELECT  7,'       '                                    FROM DUAL UNION ALL
  SELECT  8,'       '                                    FROM DUAL UNION ALL
  SELECT  9,'        '                                  FROM DUAL UNION ALL
  SELECT 10,'             '                        FROM DUAL UNION ALL
  SELECT 11,'                        '  FROM DUAL UNION ALL
  SELECT 12,'           '                            FROM DUAL UNION ALL
  SELECT 13,'                 '                FROM DUAL UNION ALL
  SELECT 14,'IBM      OLTP         '             FROM DUAL UNION ALL
  SELECT 15,'  OFFICE      '                            FROM DUAL UNION ALL
  SELECT 16,'  xBase          '                     FROM DUAL
);

SELECT * FROM T_DB;
SELECT * FROM T_DESC;

           ,  FID=0   ,
   :

        ,         
SELECT * FROM T_DB WHERE EXISTS
(
  SELECT 1
  FROM T_DESC
  WHERE T_DB.FID = T_DESC.FID AND T_DESC.FID = 0
);
  EXISTS     :    commit,         。
DELETE FROM T_DB WHERE EXISTS
(
  SELECT 1
  FROM T_DESC
  WHERE T_DB.FID = T_DESC.FID AND T_DESC.FID = 0
);

   :          
                    ,                 ,     
  ,         
Alter Table T_DB Add Constraint T_DBKey Primary Key (FID) Using index;
Alter Table T_DESC Add Constraint T_DESCKey Primary Key (FID) Using index;

        ,         
SELECT * FROM
(
  SELECT T_DB.*
  FROM T_DB,T_DESC
  WHERE T_DB.FID = T_DESC.FID AND T_DESC.FID = 0
);

DELETE FROM
(
  SELECT T_DB.*
  FROM T_DB,T_DESC
  WHERE T_DB.FID = T_DESC.FID AND T_DESC.FID = 0
);