首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用DBlink插入oracle

使用DBlink插入oracle
EN

Stack Overflow用户
提问于 2014-02-20 12:51:08
回答 2查看 19K关注 0票数 2

我有两个不同的数据库,比如DB1和DB2。在这两个DB中,我都有一个名为test_emp的公用表,但表的列有所不同:

DB1

代码语言:javascript
复制
-----
desc table1
--------------
empno               number
ename               varchar2
sal                 number
hiredate            date
deptno              number

DB2

代码语言:javascript
复制
-----
desc table2
--------------
empno               number
ename               varchar2
sal                 number

insert into table1 select * from table2@DBLink_Name

但是这里我遇到了一个列数问题,目标表的列数比源表的列数多。这里我不能指定column_names,因为我将表作为动态传递。

你能帮帮忙吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-20 13:29:09

您可以查看两个数据库上的oracle数据字典/元数据表,并为插入生成必要的sql。如果i_table_name是您的输入。

代码语言:javascript
复制
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
    )

然后,您可以使用此字符串(逗号分隔的列列表)执行类似..的操作。

代码语言:javascript
复制
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;

我还没有测试代码。确保打印插页,并确认它符合您的预期。

票数 2
EN

Stack Overflow用户

发布于 2014-02-20 13:08:58

使用

代码语言:javascript
复制
INSERT INTO table1 
SELECT a.*, 
       NULL, 
       NULL 
FROM   table2@dblink_
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21898400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档