Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.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

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
Java 如果oracle database for jdbi不存在,如何支持创建表?_Java_Oracle_Jdbi - Fatal编程技术网

Java 如果oracle database for jdbi不存在,如何支持创建表?

Java 如果oracle database for jdbi不存在,如何支持创建表?,java,oracle,jdbi,Java,Oracle,Jdbi,我们有一个框架,如果表不存在,我们需要在其中创建一个表。Oracle不支持表IF NOT EXISTS。关于如何使用jdbi为Oracle数据库实现它,有什么建议吗?这里有一种方法供您参考 如果表存在,则返回TRUE的Create函数;如果表不存在,则返回FALSE: CREATE OR REPLACE FUNCTION fn_exists ( p_table IN VARCHAR2 ) RETURN BOOLEAN IS l_dummy NUMBER; l_fou

我们有一个框架,如果表不存在,我们需要在其中创建一个表。Oracle不支持表IF NOT EXISTS。关于如何使用jdbi为Oracle数据库实现它,有什么建议吗?

这里有一种方法供您参考

如果表存在,则返回TRUE的Create函数;如果表不存在,则返回FALSE:

   CREATE OR REPLACE FUNCTION fn_exists ( p_table IN VARCHAR2 ) RETURN BOOLEAN IS
      l_dummy NUMBER;
      l_found BOOLEAN := FALSE:
   BEGIN
      SELECT 1 INTO l_dummy
      FROM   user_tables
      WHERE table_name = p_table;
      l_found := SQL%FOUND;
      RETURN ( l_found );
   EXCEPTION
      WHEN no_data_found THEN
         RETURN ( FALSE );
      WHEN OTHERS THEN
         RAISE:
   END fn_exists;
然后,像这样使用它:

   BEGIN
      IF NOT fn_exists ( 'THE_TABLE' ) THEN
         EXECUTE IMMEDIATE ' CREATE TABLE THE_TABLE ....';
      END IF;
   END;
或一个包装此文件的过程:

   CREATE OR REPLACE PROCEDURE pr_crt_if_not_exists 
   (
      p_table   IN VARCHAR2, 
      p_crt_sql IN VARCHAR2
   ) IS
   BEGIN
       IF NOT fn_exists ( p_table ) THEN
          EXECUTE IMMEDIATE p_crt_sql;
       END IF;
   END pr_crt_if_not_exists;
然后使用:

   BEGIN
      pr_crt_if_not_exists ( 'THE_TABLE', 'CREATE TABLE THE_TABLE ...' );
      pr_crt_if_not_exists ( 'THE_TABLE2', 'CREATE TABLE THE_TABLE2 ...' );
      .
      .
   END;

为什么不采取愚蠢的方法?从表中选择,如果它不存在(异常/错误),创建它?或者,更愚蠢的是,只需发出CREATETABLE语句。如果它存在,则不会创建它。忽略错误消息。