使用数据库链接执行变量

时间:2014-06-04 05:59:49

标签: oracle

我有这个问题:

DECLARE VAR1 VARCHAR(100);
BEGIN
    VAR1 :='INSERT INTO TAB1 (ID) VALUES(911197)';
    EXECUTE IMMEDIATE VAR1;
    COMMIT;
END;
/

它将被执行而没有错误(上面是一个简单的例子,在我的实际问题中,VAR1将从一个程序提供)

我的问题是在下面的问题,我想使用数据库链接在另一个数据库中执行VAR1,它给我错误,正确的语法是什么?。

create public database link
    alink
connect to
    stack
identified by
    flow
using 'server'

DECLARE VAR1 VARCHAR(100);
BEGIN
    VAR1 :='INSERT INTO TAB1 (ID) VALUES(911197)';
    EXECUTE IMMEDIATE VAR1@alink;
    COMMIT;
END;
/

它不起作用,我怎样才能将var1执行到另一个数据库?

编辑:

在尝试此查询时,我遇到以下错误:

create or replace synonym remote_dbms_sql for dbms_sql@sales;
declare
c  number;
l_global_name  varchar2(200);

begin
c := remote_dbms_sql.open_cursor();
remote_dbms_sql.parse( c,'INSERT INTO ID (CODE) VALUES(911197)', dbms_sql.native );
remote_dbms_sql.define_column( c, 1, l_global_name, 200 );
dbms_output.put_line( remote_dbms_sql.execute_and_fetch( c ) );
remote_dbms_sql.column_value( c, 1, l_global_name );
dbms_output.put_line( l_global_name );
remote_dbms_sql.close_cursor( c );
end;
/


Error:ORA-01007: variable not in select list
ORA-06512: at "SYS.DBMS_SQL", line 1673

1 个答案:

答案 0 :(得分:0)

应该是这个:

BEGIN
    VAR1 :='INSERT INTO TAB1@alink (ID) VALUES(911197)';
    EXECUTE IMMEDIATE VAR1;
    COMMIT;
END;