如何为JDBI支持Oracle数据库中的CREATE TABLE IF NOT EXISTS?

3

我们有一个框架,在需要的时候创建表格。但是Oracle不支持TABLE IF NOT EXISTS。有没有关于如何在使用jdbi时实现它的建议?


为什么不采用愚蠢的方法?从表中选择,如果不存在(异常/错误),则创建它? - maio290
或者,更加愚蠢的是 - 直接发出CREATE TABLE语句。如果它已经存在,它不会被创建。忽略错误信息。 - Littlefoot
1个回答

1
这里有一个方法供您参考。
创建一个函数,如果表存在则返回TRUE,否则返回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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接