如果使用sqlplus不存在表,则需要运行脚本

时间:2019-10-01 20:49:12

标签: sql oracle sqlplus

我必须使用sqlplus运行特定的代码,但前提是数据库中不存在某个表。例如:codeA.sql仅在存在tableB时运行codeB.sql。

我尝试在codeA.sql的IF子句中使用“ @codeB”,也尝试使用立即执行。

        BEGIN

        SELECT COUNT(*) INTO cnt FROM user_tables WHERE TABLE_NAME LIKE   
        'tableB';
        IF cnt = 0 THEN 
        @create_tableB_script.sql 
        END IF;

        END;

我希望代码A在满足条件时运行位于名为codeB.sql的文件中的代码B。

1 个答案:

答案 0 :(得分:0)

  

Oracle中的表名以大写形式存储,例如不区分大小写   除非使用引号,例如"tAbLeB"

因此,使用

SELECT COUNT(*) INTO cnt FROM user_tables WHERE TABLE_NAME LIKE 'TABLEB';

SELECT COUNT(*) INTO cnt FROM user_tables WHERE TABLE_NAME LIKE upper('tableB');

SELECT COUNT(*) INTO cnt FROM user_tables WHERE REGEXP_LIKE(TABLE_NAME,'tableB','i');
[-> 'i'代表不敏感搜索]

才能看到相关表格。顺便说一句,类似的运算符可能会被equals(=)运算符代替。但是,... WHERE TABLE_NAME LIKE 'tableB'返回的计数值不会大于零。