我必须使用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。
答案 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'
返回的计数值不会大于零。