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



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

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;

这段代码在我清理审计跟踪的过程中。

有人能帮忙吗?提前感谢!

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

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

我猜你只是没有sys的权限。模式中的AUD$。请注意,PL/SQL代码可以使用角色权限。这意味着,即使你的模式上有"dba"角色,它也不会工作。因此,您应该运行以下grant命令:

Alter user myuser select on sys.AUD$

好运。

最新更新