如何从表中删除特定记录?我有一个包含我必须删除的对象的列表。
我试图将这些名称保存在带有分隔符的变量中,并将键列与这些变量进行比较。
PGNALIST = '(''PGM1'',''PGM2'',''PGM3'',...)';
EXEC SQL DELETE FROM FILE WHERE FILEPGNA IN :PGNALIST;
但它只有在我只有一个程序名称的变量时才有效。
知道如何解决这些问题吗?
还需要这些用于SQL更新...... 目标是进一步使用嵌入式Sql。
非常感谢
答案 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,那么效率更高,代码更少。