Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL脚本中的变量DB名称_Mysql_Sql_Oracle_Plsql - Fatal编程技术网

Mysql SQL脚本中的变量DB名称

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

我正在尝试编写一个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在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需要特殊处理: