Java 如果oracle database for jdbi不存在,如何支持创建表?
我们有一个框架,如果表不存在,我们需要在其中创建一个表。Oracle不支持表IF NOT EXISTS。关于如何使用jdbi为Oracle数据库实现它,有什么建议吗?这里有一种方法供您参考 如果表存在,则返回TRUE的Create函数;如果表不存在,则返回FALSE: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
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语句。如果它存在,则不会创建它。忽略错误消息。