Как поддержать CREATE TABLE, ЕСЛИ НЕ СУЩЕСТВУЕТ база данных oracle для jdbi? - PullRequest
0 голосов
/ 29 ноября 2018

У нас есть структура, в которой нам нужно создать таблицу, если она не существует.ТАБЛИЦА ЕСЛИ НЕ СУЩЕСТВУЕТ, не поддерживается для Oracle.Любое предложение о том, как реализовать его для базы данных Oracle с использованием jdbi?

1 Ответ

0 голосов
/ 30 ноября 2018

Вот один подход для вас.

Создать функцию, которая возвращает 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;
...