oracle[[存储过程]]实现利用系统视图(简单)对比两个表的结构和字段差异。
1.除了VARCHAR2和NUMBER支持长度对比,其他类型(DATE etc.)字段仅支持类型对比。
2.支持同一数据库多用户下的表结构对比。
创建存储过程sql如下:
create or replace procedure COMPARE_CONSTRUCTRUE(tb1 IN VARCHAR,tb1owner IN VARCHAR,tb2 IN VARCHAR,tb2owner IN VARCHAR)
-- 函数入参表示定义的接收表名的变量,oracle-10g表名最长支持32(tb1、tb2)
IS
-- 定义动态游标类型名称
TYPE ref_cursor_type IS REF CURSOR;
-- 使用动态游标类型名称定义一个动态游标
cur1 ref_cursor_type;
cur2 ref_cursor_type;
-- 定义变量接收游标sql
v_sql1 VARCHAR2(1998);
v_sql2 VARCHAR2(1998);
-- 定义表名等变量,当变量类型为NUMBER或VARCHAR时进行长度比较,其余的仅比较类型
column_name varchar2(64);
column_type varchar2(64);
data_length number(9);
data_precision number(9);
data_scale number(9);
column_count_1 NUMBER(6);
-- reference list
column_name_ varchar2(64);
column_type_ varchar2(64);
data_length_ number(9);
data_precision_ number(9);
data_scale_ number(9);
column_count_2 NUMBER(6);
-- 定义指示器&