繁体   English   中英

DB2 合并 SQL iSeries

[英]DB2 Merge SQL iSeries

我创建了这个函数来根据一行是否已经存在来更新或插入一行; 我得到的错误是 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)
    );
}

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

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()作用。 它不是标准函数,您还没有提供它的定义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM