Sql Oracle查询中表名的正则表达式

Sql Oracle查询中表名的正则表达式,sql,oracle,Sql,Oracle,我试图搜索使用混合类型字母(大写/小写)导入的表,因此我使用正则表达式。但是,这不是正确的语法。有没有办法在Oracle中实现这一点 可能的表名: my_TablEnaME_20140501 MY_TablEnaME_20140501 MY_TABLENAME_20140501 SELECT * FROM REGEXP_LIKE(my_TablEnaME_20140502, '[a-zA-Z]', 'i') 问题是当我搜索时,我喜欢: SELECT * FROM step_factor_20

我试图搜索使用混合类型字母(大写/小写)导入的表,因此我使用正则表达式。但是,这不是正确的语法。有没有办法在Oracle中实现这一点

可能的表名:

my_TablEnaME_20140501
MY_TablEnaME_20140501
MY_TABLENAME_20140501

SELECT * FROM REGEXP_LIKE(my_TablEnaME_20140502, '[a-zA-Z]', 'i')
问题是当我搜索时,我喜欢:

SELECT * FROM step_factor_20120903
WHERE REGEXP_LIKE(jobDateClosed, '[a-z]+.?[A-Z]+|[A-Z]+.?[a-z]', 'c');

Error at Command Line : 121 Column : 15
Error report -
SQL Error: ORA-00942: table or view does not exist
00942. 00000 -  "table or view does not exist"
*Cause:    
*Action:
但如果我用引号搜索,例如:

SELECT * FROM "step_factor_20120903"
WHERE REGEXP_LIKE("jobDateClosed", '[a-z]+.?[A-Z]+|[A-Z]+.?[a-z]', 'c');
我得到了结果


我想要实现的是不必使用引号,因为代码需要是动态的,并处理表的任何命名约定。

请考虑Oracle名称不区分大小写,除非它们是双引号(“SQL标准要求处理标识符的方式”)

此查询将搜索同时包含小写和大写字母的名称(只能找到双引号,其他名称存储为大写):

ALL_TABLES
包含用户具有任何权限的表

USER\u表
包含用户拥有的表

[A-Z]+
至少一个大写字母

任何符号0次或以上

|
=或

总结如下:

在SQL语句中,用引号表示对象的名称 标识符或不带引号的标识符。 -带引号的标识符以双引号(“)开头和结尾。如果使用带引号的标识符命名架构对象,则必须 每当提及该对象时,请使用双引号。 -不带引号的标识符不被任何标点符号包围

表名存储在不带引号的USER_表中。例如:

  • 名称“MyTab”存储为MyTab
  • 名称MyTab存储为MyTab
要从用户表中检索所有“正确”的表名,可以使用以下查询:

select '"' || table_name || '"' from user_tables;
因为Oracle认为“MYTAB”和MYTAB是等价的

或者您可以使用此查询(但它将只找到包含小写字母的带引号的名称,而不是所有带引号的名称):


考虑到Oracle名称不区分大小写,除非它们是双引号(“这是SQL标准要求处理标识符的方式”)

此查询将搜索同时包含小写和大写字母的名称(只能找到双引号,其他名称存储为大写):

ALL_TABLES
包含用户具有任何权限的表

USER\u表
包含用户拥有的表

[A-Z]+
至少一个大写字母

任何符号0次或以上

|
=或

总结如下:

在SQL语句中,用引号表示对象的名称 标识符或不带引号的标识符。 -带引号的标识符以双引号(“)开头和结尾如果使用带引号的标识符命名架构对象,则必须 每当提及该对象时,请使用双引号。 -不带引号的标识符不被任何标点符号包围

表名存储在用户_表中,不带引号。例如:

  • 名称“MyTab”存储为MyTab
  • 名称MyTab存储为MyTab
要从用户表中检索所有“正确”的表名,可以使用以下查询:

select '"' || table_name || '"' from user_tables;
因为Oracle认为“MYTAB”和MYTAB是等价的

或者您可以使用此查询(但它将只找到包含小写字母的带引号的名称,而不是所有带引号的名称):


考虑到Oracle名称不区分大小写,除非它们是双引号(“这是SQL标准要求处理标识符的方式”)

此查询将搜索同时包含小写和大写字母的名称(只能找到双引号,其他名称存储为大写):

ALL_TABLES
包含用户具有任何权限的表

USER\u表
包含用户拥有的表

[A-Z]+
至少一个大写字母

任何符号0次或以上

|
=或

总结如下:

在SQL语句中,用引号表示对象的名称 标识符或不带引号的标识符。 -带引号的标识符以双引号(“)开头和结尾。如果使用带引号的标识符命名架构对象,则必须 每当提及该对象时,请使用双引号。 -不带引号的标识符不被任何标点符号包围

表名存储在不带引号的USER_表中。例如:

  • 名称“MyTab”存储为MyTab
  • 名称MyTab存储为MyTab
要从用户表中检索所有“正确”的表名,可以使用以下查询:

select '"' || table_name || '"' from user_tables;
因为Oracle认为“MYTAB”和MYTAB是等价的

或者您可以使用此查询(但它将只找到包含小写字母的带引号的名称,而不是所有带引号的名称):


考虑到Oracle名称不区分大小写,除非它们是双引号(“这是SQL标准要求处理标识符的方式”)

此查询将搜索同时包含小写和大写字母的名称(只能找到双引号,其他名称存储为大写):

ALL_TABLES
包含用户具有任何权限的表

USER\u表
包含用户拥有的表

[A-Z]+
至少一个大写字母

任何符号0次或以上

|
=或

总结如下:

在SQL语句中,用引号表示对象的名称 标识符或不带引号的标识符。 -带引号的标识符以双引号(“)开头和结尾如果使用带引号的标识符命名架构对象,则必须 每当提及该obj时,请使用双引号
DECLARE
  l_variable1 VARCHAR2(30);
  l_tab       record_table; -- Has to be properly defined on the column-types
BEGIN
  SELECT TABLE_NAME INTO variable1
    FROM ALL_TABLES WHERE LOWER(TABLE_NAME) = LOWER('name_from_csv');
  EXECUTE IMMEDIATE( 'SELECT * FROM "' || l_variable1 || '";' ) INTO l_tab;
END;