检查数据库中是不是存在表 - 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 变量值检查输入参数值是不是存在作为列表?

PL/SQL:在创建表之前检查模式中是不是有足够的空间

检查表是不是重复的过程 - Oracle PL/SQL

检查架构中的 IF 表 EXISTS 时发生 Oracle PL/SQL 过程错误 [重复]

检查是不是存在 SQL 表

如何在SQL Server2005数据库中检查一个表是不是存在,如存在就删除表记录,如不存在就建表.