我正在尝试编写一个sql测试脚本,它接受四个变量并生成一个sql查询,我可以轻松地将其复制/粘贴到目标db中。我正在使用一个合并来实现这一点,并试图使4个变量成为动态的:
declare
from_id VARCHAR2(242);
to_id VARCHAR2(242);
from_db VARCHAR2(242);
to_db VARCHAR2(242);
admin_account VARCHAR2(242);
begin
from_id := '123';
to_id := '234';
from_db := 'db1';
to_db := 'db2';
MERGE INTO (select * from tablename@to_db
where id = to_id) T
USING (SELECT * from tablename@from_db
where id = from_id) S
ON ( .... )
WHEN MATCHED THEN
UPDATE
SET ....
WHEN NOT MATCHED THEN
INSERT
(...)
VALUES
(...);
问题是tablename@to_db 以及tablename@from_db 是给我错误,说表不存在。它看起来好像没有改变“tablename@to_db“至”tablename@db2“就像它正在将”to_id“转换为”234“。
有人知道如何使远程数据库名动态吗?
谢谢您
更新:
使用“to_db=tablename@db2在sql查询中输入“from to \u db”也不起作用。同样的错误。
1条答案
按热度按时间des4xlb01#
如果您使用的是oracle,那么可能需要使用动态dml
EXECUTE IMMEDIATE
.from_db
以及to_db
变量需要连接起来(||
)引用的sql。