我是PL SQL的新手,我需要检查服务器上是否存在表并将其丢弃。
提前致谢, 戈兰
答案 0 :(得分:15)
您可以查询表名
select tname from tab where tname = 'TABLE_NAME_TO_SEARCH_FOR';
答案 1 :(得分:8)
select tname from tab where tname = 'TABLE_NAME';
答案 2 :(得分:4)
这就是信息模式的真正力量所在。 一个简单的查询将指向正确的方向
SELECT
*
FROM
information_schema.tables
WHERE
table_name='salesorders';
然后可以在plpg函数中使用
CREATE OR REPLACE FUNCTION table_exists(v_table text)
RETURNS boolean AS
$BODY$
DECLARE
v_count int;
v_sql text;
BEGIN
v_sql =
'SELECT ' ||
' count(1) ' ||
'FROM ' ||
' information_schema.tables ' ||
'WHERE ' ||
E' table_name=\'' || v_table || E'\'';
EXECUTE v_sql INTO v_count;
RETURN v_count>0;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE
COST 100;
使用功能
select * from table_exists('salesordesrs');
这应该足以让你前进。
OOPS 似乎我误读了原来的海报问题。我已经回答了PostgreSQL。
彼得。
答案 3 :(得分:3)
最有效的方法是,不要。放下桌子吧。如果该表已经不存在,则会引发异常。
在删除表之前运行查询只是浪费时间做Oracle自动为您做的事情。
您可以根据需要处理异常,例如:
BEGIN
EXECUTE IMMEDIATE 'DROP TABLE "MYTABLE"';
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE = -942 THEN
DBMS_OUTPUT.put_line('the table did not exist!');
ELSE
RAISE;
END IF;
END;
答案 4 :(得分:1)
上面的解决方案我遇到了一些问题,因为我的数据库有一个奇特的树结构。这应该为您的架构中的每个表提供:
SELECT
table_name
FROM
all_tables
WHERE
table_name = '<your table here>'