gpt4 book ai didi

mysql - SQL 脚本中的变量数据库名称

转载 作者:行者123 更新时间:2023-11-29 10:26:41 25 4
gpt4 key购买 nike

我正在尝试编写一个 SQL 测试脚本,该脚本接受四个变量并生成一个 SQL 查询,我可以轻松地将其复制/粘贴到目标数据库中。我为此使用了合并,并尝试使 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”并将“FROM to_db”放入 SQL 查询中也不起作用。同样的错误。

最佳答案

如果您使用的是 Oracle,则可能需要使用 EXECUTE IMMEDIATE 进行动态 DML。

from_dbto_db 变量需要连接 (||) 到引用的 sql。

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';

EXECUTE IMMEDIATE '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
(...)';

END;

关于mysql - SQL 脚本中的变量数据库名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48152530/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com