java - oracle database for jdbi 如何支持 CREATE TABLE IF NOT EXISTS?

标签 java oracle jdbi

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

最佳答案

这是适合您的一种方法。

如果表存在则创建返回 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;

关于java - oracle database for jdbi 如何支持 CREATE TABLE IF NOT EXISTS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53544434/

相关文章:

java - 如何使用 Richfaces 构建复选框树?

oracle - 任何像样的weblogic教程?

SQL - 左外连接、减号、交集速度比较

java - 带有 JRE 7 的 Liberty 运行时

java - JLabel 中心 drawString() 不同大小的文本

java - resultSet 字符串中的控制字符

java - @Bind 可以使用 JDBI 与枚举和其他任意类型一起使用吗?

java - JDBI:插入数据时出现Long/Interger异常

java - 如何在我本地机器上的eclipse中运行Tomcat服务器上的web应用项目

c# - Oracle Date 列存储时间,但不显示它