我创建了一个程序,如下面的
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的表仍将存在。改为大写没有区别。我想这个变量根本就没有被替换......关于如何解决它的任何想法?
答案 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是包含表名的参数,而不是您在示例中尝试的字符串