【问题标题】:How to handle an array in a stored procedure on DB2?如何在 DB2 的存储过程中处理数组?
【发布时间】:2019-10-14 08:57:26
【问题描述】:

我正在开发一个将数据存储在 DB2 中的应用程序,并且我应该能够在 DB 的表中批量“删除”数据。实际上,“删除”数据的方法是将其“已删除”值更改为“Y”。

表格的形式是:

标识 |姓名 |已删除 |

1 |名称1 |否|

2 |名称2 |否|

...

x |名称 |否|

我想要做的是创建一个 SQL 存储过程,它以一个数组为参数,其中包含我需要从“N”更改为“Y”的项目的 ID。

我(个人)的做法是:

UPDATE MyTable DELETED = 'Y' where id = '1'; 

所以对于存储过程,我应该只用这种形式发送数组:

[1, 20, 5, ... , x]

并且具有这些 Id 的行应更改为 Y。

我正在考虑的存储过程的结构是:

PROCEDURE deleteSeveral (arrayWithIds)

LANGUAGE SQL

BEGIN

    -- loop for ids array
            UPDATE MyTable DELETED = 'Y' where id = arrayWithIds[i]; 
    -- Ciclo para recorrer el arreglo

END

有人可以帮我解决这个问题吗?谢谢!

【问题讨论】:

  • 什么操作系统运行 Db2 服务器(Z/OS、i 系列、Linux/unix/windows)? Db2 是什么版本?另外,您将从哪种编程语言调用存储过程?

标签: sql arrays stored-procedures db2


【解决方案1】:

尝试将 ID 列表作为“类似 xml”的字符串传递:

UPDATE MyTable t
SET DELETED = 'Y'
where exists (
  select 1
  from xmltable (
    '$D/d/i' passing xmlparse(document '<d><i>1</i><i>20</i><i>5</i></d>') as "D" 
    columns
      i int path '.'
  ) p
  where p.i=t.id
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多