plsql比较2个不同数据库中表的结构

时间:2016-12-07 12:26:14

标签: oracle plsql

我的任务是比较两个不同数据库之间的表结构。如果缺少列,我必须报告缺少的列及其表。

简单减去查询不会返回。由于我是pl sql编程的新手,我没有得到任何想法。

有人可以帮帮我吗?

Table 1:
Columns 
ABC
DEF
GHI

Table2:
ABC
DEF 
GHI
JKL

这是一个额外的专栏。如果必须报告,我该怎么做。

PFB我的简单过程:

create or replace PROCEDURE PROC_EU_TABLE_COMPARE (
R_CURSOR OUT SYS_REFCURSOR,
SRC_SCHEMA_NAME         IN VARCHAR2,
TGT_SCHEMA_NAME         IN VARCHAR2
)

IS 


CNT3 NUMBER;
SQL_TEXT3 VARCHAR2(4000);

BEGIN

--SRC_SCHEMA_NAME      := UPPER(SRC_SCHEMA_NAME);
--TGT_SCHEMA_NAME      := UPPER(TGT_SCHEMA_NAME);


SQL_TEXT3:='SELECT * FROM 
((SELECT * FROM ALL_TAB_COLUMNS WHERE TABLE_NAME =''%EU%'' AND OWNER ='''||SRC_SCHEMA_NAME||'''
        MINUS
        SELECT * FROM ALL_TAB_COLUMNS WHERE TABLE_NAME LIKE ''%EU%''AND OWNER ='''||TGT_SCHEMA_NAME||''')
        UNION
        (SELECT * FROM ALL_TAB_COLUMNS WHERE TABLE_NAME LIKE ''%EU%''AND OWNER ='''||TGT_SCHEMA_NAME||'''
        MINUS
        SELECT * FROM ALL_TAB_COLUMNS WHERE TABLE_NAME =''%EU%'' AND OWNER ='''||SRC_SCHEMA_NAME||'''))';

        EXECUTE IMMEDIATE SQL_TEXT3 INTO CNT3;
        DBMS_OUTPUT.PUT_LINE(CNT3);

END; 

1 个答案:

答案 0 :(得分:1)

首先,开发人员IDE(PL / SQL Developer,Oracle SQL Developer)具有架构比较工具 此外,您询问的是两个数据库,但在您的代码中,您比较了同一数据库中的两个模式。确保你了解其中的差异 最后一件事,你不需要在这里使用execute immediate。这里是SQL * Plus的脚本:

SQL> create table table1 (
  abc number,
  def number,
  ghi number);

Table created.

SQL> create table table2 (
  abc number,
  def number,
  ghi number,
  jkl number);

Table created.

SQL> create or replace procedure compare_tables is
begin
  for i in (select column_name 
              from all_tab_columns
             where table_name = 'TABLE2'
             minus
            select column_name 
              from all_tab_columns
             where table_name = 'TABLE1') loop
    dbms_output.put_line(i.column_name);         
  end loop;
end;
/

Procedure created.

SQL> begin
  dbms_output.put_line('Columns of table2 not presented in table1:');
  compare_tables;
end;
/

Columns of table2 not presented in table1:
JKL

PL/SQL procedure successfully completed.

此代码几乎与您的代码相同,因此如果它不起作用,请尝试手动比较表格或创建可重现的示例。