检查oracle表是否存在并在之后创建它 - ORA-06550

时间:2014-05-28 07:06:03

标签: database oracle plsql

我试图检查表是否存在,如果不存在,那么我想创建它。但是我仍然遇到这个错误:

Error report -
ORA-06550: řádka 30, sloupec 28:
PL/SQL: ORA-00942: tabulka nebo pohled neexistuje
ORA-06550: řádka 30, sloupec 3:
PL/SQL: SQL Statement ignored
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.

我的代码是:

SELECT COUNT(*) into cnt FROM dba_tables WHERE owner = 'CENTRUMADMIN' and table_name = 'AUD$_BACKUP';
DBMS_OUTPUT.PUT_LINE(cnt);
IF (cnt <= 0) THEN
EXECUTE IMMEDIATE 'CREATE TABLE CENTRUMADMIN.AUD$_BACKUP AS select * from SYS.AUD$ where 1=2';
DBMS_OUTPUT.PUT_LINE('Vytvorena tabulka AUD$_BACKUP ve shematu CENTRUMADMIN:');
END IF;

此代码位于我清理审计跟踪的过程中。

任何人都可以帮忙吗?提前谢谢!

1 个答案:

答案 0 :(得分:0)

当我在你的评论中读到你说你只有在表AUD $ _BACKUP不存在时才会收到错误。 这意味着你在这里得到错误:

EXECUTE IMMEDIATE 'CREATE TABLE CENTRUMADMIN.AUD$_BACKUP AS select * from SYS.AUD$ where 1=2';

我猜你在架构中没有sys.AUD $的权限。 请注意PL / SQL代码可以使用角色权限。这意味着,即使你有&#34; dba&#34;你的架构上的角色,它不会工作。所以你应该运行以下grant命令:

Alter user myuser select on sys.AUD$
祝你好运。