仅针对特定表的 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 循环的主要内容,如果未能解决你的问题,请参考以下文章
Oracle SQL - ALTER VIEW:ORA-00922:缺少或无效选项