db2中的条件DROP INDEX

时间:2011-12-20 09:52:35

标签: sql indexing db2 procedure

我在Debian GNU / Linux上使用IBM DB2 9.7.2。我需要一个条件DROP INDEX,只有它存在。由于它不受支持,我编写了一个接受 IN idx_name VARCHAR(128)作为索引名称的过程。在过程中,我检查SYSCAT.INDEXES中是否存在具有该名称的索引,如果是,则执行

DROP INDEX idx_name;

但显然DROP INDEX不接受字符串。

或者我尝试使用SYSPROC.SYSTS_DROP(),但它给了我一个错误:

SQL20427N文本搜索管理过程中发生错误或 命令。错误消息是“CIE00340无法启动可执行程序 “cieadmsv”。 “.SQLSTATE = 38H14

我可能会修改一个删除该索引并捕获异常的过程,这样如果不存在则没有错误但是我仍然不知道:如何让DROP INDEX接受变量

1 个答案:

答案 0 :(得分:2)

与大多数SQL一样,

DROP INDEX不接受标识符的参数(您也不能使用SELECT语句执行此操作)。我希望这与尝试验证/准备语句的优化器有关 - 毕竟你只能为列内容指定它们。

您有两种选择:

  1. 使用Dynamic SQL创建语句PREPARE和EXECUTE。您应该能够在存储过程中执行此操作。但是,我会小心这一点,因为它可能会使未经授权的人删除指标(取决于程序的设置方式)。
  2. 忽略错误。具体来说,忽略SQLCODE -204(那就是iSeries DB2代码)。那么如果它不存在呢?无论如何我们试图将其删除......其他错误仍应报告/处理。