检查数据库中是否存在表 - PL SQL

Gor*_*ran 7 oracle plsql

我是PL SQL的新手,我需要检查服务器上是否存在表并删除它.

先谢谢,戈兰

sch*_*tbi 15

你可以查询表名

select tname from tab where tname = 'TABLE_NAME_TO_SEARCH_FOR';
Run Code Online (Sandbox Code Playgroud)

  • 请注意,即使您创建的表没有大写字母,表名也必须是大写字母。 (3认同)

Kev*_*ell 8

select tname from tab where tname = 'TABLE_NAME';
Run Code Online (Sandbox Code Playgroud)


Jef*_*emp 6

最有效的方法是,不要。把桌子放下就行了。如果该表尚不存在,则会引发异常。

在删除表之前运行查询只是浪费时间做 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;
Run Code Online (Sandbox Code Playgroud)


Pet*_*son 5

这就是信息模式的真正威力所在。一个简单的查询将为您指明正确的方向

SELECT
  *
FROM
  information_schema.tables
WHERE
  table_name='salesorders';
Run Code Online (Sandbox Code Playgroud)

然后可以在 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;
Run Code Online (Sandbox Code Playgroud)

使用功能

select * from table_exists('salesordesrs');
Run Code Online (Sandbox Code Playgroud)

这应该足以让你继续前进。

哎呀似乎我误读了原来的海报问题。我已经回答了 PostgreSQL。

彼得。