RPG Embedded SQL删除带有列表的几条记录

时间:2018-05-08 21:11:10

标签: sql rpgle

如何从表中删除特定记录?我有一个包含我必须删除的对象的列表。

我试图将这些名称保存在带有分隔符的变量中,并将键列与这些变量进行比较。

PGNALIST = '(''PGM1'',''PGM2'',''PGM3'',...)'; 

EXEC SQL DELETE FROM FILE WHERE FILEPGNA IN :PGNALIST;

但它只有在我只有一个程序名称的变量时才有效。

知道如何解决这些问题吗?

还需要这些用于SQL更新...... 目标是进一步使用嵌入式Sql。

非常感谢

2 个答案:

答案 0 :(得分:2)

不能那样做......

对于静态SQL,您必须拥有多个变量:

range

当然,您需要知道您需要传递多少或至少最大数量的值。

或者,您可以使用动态SQL在运行时构建语句..

EXEC SQL 
  DELETE FROM FILE 
  WHERE FILEPGNA IN (:p1, :p2, :p3, ...);

请注意,QUOTE常量只会让生活变得更轻松。

答案 1 :(得分:2)

查尔斯是正确的,你不能直接这样做。当你用SQL做得不够时,经常出现这些类型的问题。典型的SQL解决方案会从另一个表中删除删除列表,如下所示:

EXEC SQL 
    DELETE FROM FILE 
    WHERE FILEPGNA IN (
        SELECT KEY FROM OTHERTABLE WHERE KEY LIKE 'PGM%');

如果您已经从另一个表中提取PGNALIST,那么效率更高,代码更少。