【问题标题】:DB2 Merge SQL iSeriesDB2 合并 SQL iSeries
【发布时间】:2018-02-24 19:43:22
【问题描述】:

我创建了这个函数来根据一行是否已经存在来更新或插入一行;我得到的错误是 VAR1 不是变量。这是我第一次在 iSeries 和 DB2 上以这种方式设置合并。希望有人可以提供帮助,感谢所有花费时间的人。

function mergeRecord($var1, $var2, $var3, $var4, $var5, $var6){

db2RunSql("
        MERGE INTO schema.tableName AR
  USING (VALUES (:var1, :var2, var3, :var4, :var5, :var6)
    FOR :var1 ROWS)
    AS AC (VAR1, VAR2, VAR3, VAR4, VAR5, VAR6)
  ON (AR.VAR1 = AC.VAR1 AND AR.VAR4 = AC.VAR4 AND AR.VAR6 = AC.VAR6)
  WHEN MATCHED THEN UPDATE SET VAR1=?, VAR2=?, VAR3=?, VAR4=?, VAR5=?, VAR6=?
  WHEN NOT MATCHED THEN INSERT (:var1, :var2, :var3, :var4, :var5, :var6)
     VALUES (?, ?, ?, ?, ?, ?)",
        array($var1, $var2, $var3, $var4, $var5, $var6)
    );
}

【问题讨论】:

  • :var1, :var2, ... 中的冒号看起来像是在尝试将 SQL 嵌入到像 RPG 这样的高级语言中。 $v ar1, $var2, ... 形式的 php 标记和变量看起来像是在谈论 PHP。而且我在任何文档中都找不到db2RunSql()。那么你想做什么,什么语言。如果是 PHP,您使用的是哪个数据库扩展? db2RunSql() 是如何定义的?
  • 您是否正在假设 PDO 并混合使用命名参数和传统的 ? 参数标记?

标签: php sql db2-400


【解决方案1】:

也许你正在寻找这样的东西:

function mergeRecord($var1, $var2, $var3, $var4, $var5, $var6){

db2RunSql("
  MERGE INTO schema.tableName AR
    USING (VALUES (?, ?, ?, ?, ?, ?))
      AS AC (VAR1, VAR2, VAR3, VAR4, VAR5, VAR6)
    ON (ar.var1, ar.var4, ar.var6) = (ac.var1, ac.var4, ac.var6)
  WHEN MATCHED THEN 
    UPDATE SET (ar.var2, ar.var3, ar.var5) = (ac.var2, ac.var2, ac.var5)
  WHEN NOT MATCHED THEN 
    INSERT VALUES (ac.var1, ac.var2, ac.var3, ac.var4, ac.var5, ac.var6)",
        array($var1, $var2, $var3, $var4, $var5, $var6)
    );
}

我认为您试图在示例中插入太多参数标记,而您可以简单地将源 (USING) 表中的列用作更新或插入值。

注意:这只是一个猜测,因为我不确定db2RunSql() 做了什么。它不是标准函数,您还没有提供它的定义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-26
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 2012-03-22
    • 1970-01-01
    相关资源
    最近更新 更多