【问题标题】:Are there any ways to handle multiple elements at the same time in ksh?ksh 有没有办法同时处理多个元素?
【发布时间】:2023-02-02 12:27:11
【问题描述】:

我正在尝试在 ksh 中执行如下所示的删除 SQL。

for ((i = 0; i < ${#array[@]}; i++))
do
  delete from TABLE1 where NAME in (${array[i]})
done

在这个循环中,我可以一行一行地删除。但我想要的是同时删除多行,如 5 或 10。

我不知道,所以我需要你的帮助。

【问题讨论】:

  • 数组的内容是什么?数字?字符串?删除多行是什么意思?例如array=(1,2,3,4,5) 并且您想删除名称在 1,2,3,4,5 中的所有行?请添加更多信息,以便我们为您提供帮助:)
  • @CarloCorradini NAME 列表明它是一个字符串。
  • 将您的数组转换为类似names="'name1', 'name2', 'name3'" 的字符串。然后你可以做WHERE NAME IN ($names)。但是您还需要转义名称中的任何引号。
  • 如果你不能让它工作,那么......这里的数据库访问在哪里?你可以做for (....) ; do printf "delete from TABLE1 where NAME in (${array[i]})]\n" ; done | isql -U... -S... 或类似的。可能只是where name = '${arrayii]}\n"。祝你好运。
  • 谢谢你的 cmets!数组中的内容是字符串。并且,例如,它在数组中有 100 个元素。我想要的是同时删除 10 个元素并重复 10 次(而不是同时删除 100 个元素)。

标签: arrays linux shell db2 ksh


【解决方案1】:

这是另一种方法(我没有 ksh,但它应该在那里工作)

rc=0
while [ $rc -eq 0 ]; do
    rc=$(db2 "delete from (select * from table1 where name in ... fetch first 10 rows only) dt")
done

只要派生表 dt 唯一标识 table1 中的一行,就可以从中删除

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-17
    • 2022-01-17
    • 2020-05-17
    • 1970-01-01
    • 1970-01-01
    • 2015-03-06
    • 2022-01-03
    • 2017-02-17
    相关资源
    最近更新 更多