【问题标题】:KSH-update : Get rows affectedKSH-update :获取受影响的行
【发布时间】:2016-11-01 09:06:32
【问题描述】:

您好,我正在查询这样的 teradata 数据库:

for  var in `db2 -x  "$other_query"`; 
do
 query_update_date="update test SET date =Null WHERE 
name_test='$var '"
 db2 -v "$query_update_date"
done

我的查询已执行,但我只想在一行或多行受到更新影响(更改)时打印 query_update_date。

示例:
如果我有
循环的第一个查询:

 query_update_date="update test SET date =Null WHERE 
name_test='John'"

第二次循环查询:

query_update_date="update test SET date =Null WHERE 
name_test='Jeff'"

在我的表中查询之前:

name_test         date
 Jeff             01/07/2016
 John             Null

查询后

name_test         date
 Jeff             Null
 John             Null

John 的日期已经是 null ,所以它没有受到更新的影响。 和

db2 -v "$query_update_date"

打印我的查询。对于上一个示例,我想要的只是在我的日志中打印

query_update_date="update test SET date =Null WHERE 
name_test='Jeff'"

【问题讨论】:

  • 复制粘贴您期望从查询中获得的示例输出,即可能存储在变量中的值。
  • 我要编辑主题
  • 在某些情况下,query_update_date 不会影响行,因为日期已经为 Null。我的日志不需要这些查询
  • 那么你需要检查变量是空还是有效? if [ ! -z "$query_update_date" ]; ?
  • WHERE ... AND date is not null 将帮助统计更改的记录。

标签: sql bash teradata ksh


【解决方案1】:

在执行查询之前和之后拍摄表的快照。使用您喜欢的任何工具:如何(假设 SQL)SPOOL 事先对这个文件进行 "SELECT * FROM T" 查询,然后再进入该文件。使用 UNIX diff 命令比较两个文件,并仅计算其输出的长度:

LINES_OUT=$(diff oldResults newResults | wc -l)
如果 [[ $LINES_OUT = 0 ]]
然后
# 记录查询,但是你这样做

如果 $IS_ANY_DIFF 为真,则记录查询;否则,不要。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-03
    • 2010-10-26
    • 2011-05-01
    • 2013-01-21
    • 2011-06-11
    • 2022-11-10
    • 1970-01-01
    相关资源
    最近更新 更多