Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 检查数据库中是否存在表-PL SQL_Oracle_Plsql - Fatal编程技术网

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

Oracle 检查数据库中是否存在表-PL SQL,oracle,plsql,Oracle,Plsql,我是PL SQL的新手,我需要检查服务器上是否存在表并删除它 提前感谢,, Goran您可以查询表名 select tname from tab where tname = 'TABLE_NAME_TO_SEARCH_FOR'; 这就是信息模式的真正威力所在。 一个简单的查询将为您指明正确的方向 SELECT * FROM information_schema.tables WHERE table_name='salesorders'; 然后可在plpg功能中使用 CREATE

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

提前感谢,,
Goran

您可以查询表名

select tname from tab where tname = 'TABLE_NAME_TO_SEARCH_FOR';

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

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的问题


彼得。

最有效的方法是,不要。把桌子放下。如果该表不存在,它将引发异常

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

我在上面的解决方案中遇到了一些问题,因为我的数据库有一个特殊的树结构。这将为架构中的每个表提供:

SELECT
   table_name
FROM
   all_tables
WHERE
   table_name = '<your table here>'
选择
表名称
从…起
所有的桌子
哪里
表名称=“”

@user428955:不,那不行-绑定变量不能用于表名。你确定吗?我似乎不同意你的看法。是的,我肯定。该链接中没有任何内容表明可以在绑定变量中提供表名。引用链接:“不能使用绑定参数将架构对象的名称传递给动态SQL语句。”我宁愿选择if,然后选择exception。请注意,即使创建了不带大写的表,表名也必须是大写的。请注意,即使创建了不带大写的表,表名也必须是大写的。
SELECT
   table_name
FROM
   all_tables
WHERE
   table_name = '<your table here>'