仅针对特定表的 Oracle View 循环

Posted

技术标签:

【中文标题】仅针对特定表的 Oracle View 循环【英文标题】:Oracle View loop on specific tables only 【发布时间】:2021-05-25 12:46:23 【问题描述】:

我有很多表格,其中一些以数字(日期)结尾。

由于技术原因,我不得不在每个表上创建一个视图(只是一种解决方法)

当前状态类似于:

begin
  for i in (select table_name 
              from   user_tables 
              where  table_name like 'XXX_%'
             )
  loop
    execute immediate 'CREATE VIEW '||replace(i.TABLE_NAME,'XXX_','YYY_')||' AS SELECT * FROM '||i.TABLE_NAME;
  end loop;             
end;
/

它所做的只是为每个以“XXX_”开头的表创建视图。它几乎是我需要的。

但现在,有时表名看起来像“XXX_tablename_20210302”,这是手动备份。

它并不总是 8 位数字(日期),有时更短,有时更长。我想避免所有在表名末尾有数字的表(从右到左直到第一个“_”检查,它可能是一个数字?)

有人知道怎么解决吗?

我有点卡在这里。

【问题讨论】:

【参考方案1】:

您可以在regexp_like 中使用正则表达式:

create table xxx_t ( c1 int );
create table xxx_t_20210401 ( c1 int );

select table_name from user_tables
where  regexp_like ( table_name, '^XXX_.*[^0-9]+$' );

TABLE_NAME   
XXX_T         

这会找到所有的表

以XXX_开头XXX_ 后跟任何字符.* 以数字结尾[^0-9]+$

【讨论】:

嘿,正则表达式解决方案听起来很有帮助。您的示例确实排除了所有以数字结尾的表格。谢谢你。但是我得到了一些表格,它们确实以数字结尾,但也包含字母,例如:“TABLE_NAME_WSTVAL01”。那张桌子被排除在外(我的错)。是否有可能仅排除最后一个“_”(下划线)之后仅包含数字的表? (表名中下划线的数量不定)。在此先感谢,并感谢您的回答。现在将深入研究正则表达式。 只需修改正则表达式以满足您的要求;您可以使用regex101 之类的网站来检查它是否与您想要的匹配

以上是关于仅针对特定表的 Oracle View 循环的主要内容,如果未能解决你的问题,请参考以下文章

iOS - 仅针对特定视图翻转动画

Oracle SQL - ALTER VIEW:ORA-00922:缺少或无效选项

Oracle过程 - 选择所有表,然后循环遍历这些表的记录

ORA-07445 访问冲突

oracle 存储过程 权限问题 PL/SQL: ORA-01031: 权限不足

Oracle怎么查询表名,字段名以及字段的属性