Mysql SQL脚本中的变量DB名称
我正在尝试编写一个SQL测试脚本,它接受四个变量并生成一个SQL查询,我可以轻松地将其复制/粘贴到目标数据库中。我正在为此使用合并,并尝试使4个变量动态:Mysql SQL脚本中的变量DB名称,mysql,sql,oracle,plsql,Mysql,Sql,Oracle,Plsql,我正在尝试编写一个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 fr
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_db”也不起作用。相同的错误。如果您使用的是Oracle,则可能需要使用
执行即时的动态DML
from_db
和to_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环境)中不可能使用变量对象名(表或列名),那么mysql或plsql中不支持合并吗?不一样。请适当调整标记。如果是Oracle,则动态SQL需要特殊处理: