Oracle - 验证 table 是否与具有 table 名称值的列同名

Oracle - validate table exists with same name with column with table name value

我们有 table,其中有 TABLE_NAME 列,在同一方案中包含真实的 tables 名称

我们使用 table 的名称值来创建动态 SQL 插入

能否验证这些名称是否包含有效的 table 名称?

例如,如果有人重命名存在于列 TABLE_NAME 中的 table,以使用 ora 异常或其他方式提醒(类似于 constraint/key)?

我认为您可能会使用 DDL 触发器来引发错误或使用 dbms_output 来获取警报

像这样(更新到你自己的场景

SQL> create table  my_table_list ( c1 varchar2(1) ) ;

Table created.

SQL> insert into my_table_list values ( 'T' ) ;

1 row created.

SQL>  create table t ( c1 number ) ;

Table created.

然后我们在模式上使用 DDL 触发器

create or replace trigger audit_ddl_trg after rename on schema
declare
vcounter pls_integer;
begin
  if (ora_sysevent='RENAME')
  then
      select count(*) into vcounter from cpl_rep.my_table_list where c1 = upper(ora_dict_obj_name);
      if vcounter > 0 
      then 
        raise_application_error(-20001, 'Rename not allowed. Table does not exist');
      end if;
 end if;
end;
/

SQL> rename x to t;

Table renamed.

SQL> rename t to x ;
rename t to x
*
ERROR at line 1:
ORA-04088: error during execution of trigger 'CPL_REP.AUDIT_DDL_TRG'
ORA-00604: error occurred at recursive SQL level 1
ORA-20001: Rename not allowed. Table does not exist
ORA-06512: at line 9

它可以改进以控制更多的东西,但我认为这涵盖了你的问题。