我有两个不同的数据库,比如DB1和DB2。在这两个DB中,我都有一个名为test_emp的公用表,但表的列有所不同:
DB1
-----
desc table1
--------------
empno number
ename varchar2
sal number
hiredate date
deptno numberDB2
-----
desc table2
--------------
empno number
ename varchar2
sal number
insert into table1 select * from table2@DBLink_Name但是这里我遇到了一个列数问题,目标表的列数比源表的列数多。这里我不能指定column_names,因为我将表作为动态传递。
你能帮帮忙吗?
发布于 2014-02-20 13:29:09
您可以查看两个数据库上的oracle数据字典/元数据表,并为插入生成必要的sql。如果i_table_name是您的输入。
select list_agg(column_name,',') columns -- comma separated list of columns
from (
select column_name
from all_tab_cols
where owner = 'XYZ'
and table_name = i_table_name
intersect
select column_name
from all_tab_cols@remote_database
where owner = 'XYZ' -- could be different (?)
and table_name = i_table_name
)然后,您可以使用此字符串(逗号分隔的列列表)执行类似..的操作。
v_sql := 'insert into ' || i_table_name || ' ' || '(' ||
v_column_list || ')' ||
' select ' || '( ' || v_column_list ||
' from ' || i_table_name || '@' || remote_db_name;
dbms_output.put_line(v_sql);
execute immediate v_sql;我还没有测试代码。确保打印插页,并确认它符合您的预期。
发布于 2014-02-20 13:08:58
使用
INSERT INTO table1
SELECT a.*,
NULL,
NULL
FROM table2@dblink_https://stackoverflow.com/questions/21898400
复制相似问题