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

发布于 2024-09-15 16:15:29 字数 56 浏览 5 评论 0原文

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

提前致谢, 戈兰

I'm new in PL SQL, and I need to check if table exist on server and drop it.

Thanks in advance,
Goran

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

东京女 2024-09-22 16:15:29

您可以查询表名

select tname from tab where tname = 'TABLE_NAME_TO_SEARCH_FOR';

you can query the tablenames

select tname from tab where tname = 'TABLE_NAME_TO_SEARCH_FOR';
生来就爱笑 2024-09-22 16:15:29
select tname from tab where tname = 'TABLE_NAME';
select tname from tab where tname = 'TABLE_NAME';
青春如此纠结 2024-09-22 16:15:29

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

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。

彼得.

This is where the true power of the information schema comes in.
A simple query will point you in the right direction

SELECT
  *
FROM
  information_schema.tables
WHERE
  table_name='salesorders';

This can then be used in plpg function

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;

Use the function

select * from table_exists('salesordesrs');

That should be enough to get you going.

OOPS
Seems I misread the original posters question. I've answered for PostgreSQL.

Peter.

我的黑色迷你裙 2024-09-22 16:15:29

最有效的方法是,不要。只需放下桌子即可。如果该表尚不存在,则会引发异常。

在删除表之前运行查询只是浪费时间去做 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;

The most efficient method is, don't. Just drop the table. If the table didn't exist already, it'll raise an exception.

Running a query just before dropping the table is just wasting time doing what Oracle will do automatically for you.

You can handle the exception however you want, e.g.:

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;
乖不如嘢 2024-09-22 16:15:29

我在使用上述解决方案时遇到了一些麻烦,因为我的数据库具有特殊的树结构。这应该给出架构中的每个表:

SELECT
   table_name
FROM
   all_tables
WHERE
   table_name = '<your table here>'

I had some troubles with the solutions above, as my DB has a peculiar tree structure. This should give every table in your schema:

SELECT
   table_name
FROM
   all_tables
WHERE
   table_name = '<your table here>'
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文