0

我创建了一个过程,如下所示

CREATE OR REPLACE PROCEDURE drop_if_exists (table_name IN varchar2)
IS
BEGIN
        EXECUTE IMMEDIATE 'DROP TABLE table_name';
EXCEPTION
      WHEN OTHERS THEN
         IF SQLCODE != -942 THEN
             RAISE;
         END IF;
END;

当我将它作为 drop_if_exists ( 'my_table' ) 运行时,它表示一切都已成功执行,但任何名为 my_table 的表在调用该过程后仍将存在。更改为大写没有区别。我猜这个变量根本没有被替换......关于如何修复它的任何想法?

4

3 回答 3

7

您正在删除一个名为“table_name”的表,这与删除您在参数中传递的表有什么不同。

试试这个:

EXECUTE IMMEDIATE 'DROP TABLE ' || table_name ;

无论如何,我不建议这样做。您的代码具有潜在危险。

于 2012-09-03T15:28:17.567 回答
3
EXECUTE IMMEDIATE 'DROP TABLE ' ||table_name;
于 2012-09-03T15:28:02.917 回答
0

你所做的实际上是错误的,你应该这样做:

立即执行“删除表”|| 表名;其中 table_name 是包含表名称的参数,而不是您在示例中尝试的字符串

于 2012-09-04T06:32:08.437 回答