变量未在程序中替换。怎么了?

时间:2012-09-03 15:24:48

标签: oracle plsql

我创建了一个程序,如下面的

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的表仍将存在。改为大写没有区别。我想这个变量根本就没有被替换......关于如何解决它的任何想法?

3 个答案:

答案 0 :(得分:7)

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

试试这个:

EXECUTE IMMEDIATE 'DROP TABLE ' || table_name ;

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

答案 1 :(得分:3)

EXECUTE IMMEDIATE 'DROP TABLE ' ||table_name;

答案 2 :(得分:0)

你做的事实上是错的,你应该这样做:

EXECUTE IMMEDIATE'DROP TABLE'|| TABLE_NAME; 其中table_name是包含表名的参数,而不是您在示例中尝试的字符串