检查数据库中是不是存在表 - PL SQL
Posted
技术标签:
【中文标题】检查数据库中是不是存在表 - PL SQL【英文标题】:Check if table exists in the database - PL SQL检查数据库中是否存在表 - PL SQL 【发布时间】:2010-08-19 19:24:04 【问题描述】:我是 PL SQL 的新手,我需要检查服务器上是否存在表并将其删除。
提前致谢, 戈兰
【问题讨论】:
【参考方案1】:你可以查询表名
select tname from tab where tname = 'TABLE_NAME_TO_SEARCH_FOR';
【讨论】:
请注意,即使您创建的表没有大写,表名也必须大写。【参考方案2】:select tname from tab where tname = 'TABLE_NAME';
【讨论】:
【参考方案3】:这就是信息模式的真正力量所在。 一个简单的查询将为您指明正确的方向
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');
这应该足以让你继续前进。
哎呀 似乎我误读了原始海报的问题。我已经回答了 PostgreSQL。
彼得。
【讨论】:
【参考方案4】:最有效的方法是,不要。只是放下桌子。如果该表不存在,则会引发异常。
在删除表之前运行查询只是在浪费时间做 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;
【讨论】:
@user428955:不,这不起作用 - 绑定变量不能用于表名。 你确定吗? docs.oracle.com/cd/B14117_01/appdev.101/b10807/13_elems017.htm 似乎不同意你的观点。 是的,我确定。该链接中没有任何内容表明可以在绑定变量中提供 表名。 引用自您的链接:“您不能使用绑定参数将模式对象的名称传递给动态 SQL 语句。” 我宁愿选择一个 if 然后是一个例外。【参考方案5】:我在上面的解决方案中遇到了一些问题,因为我的数据库有一个特殊的树形结构。这应该提供架构中的每个表:
SELECT
table_name
FROM
all_tables
WHERE
table_name = '<your table here>'
【讨论】:
请注意,即使您创建的表没有大写,表名也必须大写。以上是关于检查数据库中是不是存在表 - PL SQL的主要内容,如果未能解决你的问题,请参考以下文章
如何根据 PL/SQL 变量值检查输入参数值是不是存在作为列表?