Sql Oracle查询中表名的正则表达式
我试图搜索使用混合类型字母(大写/小写)导入的表,因此我使用正则表达式。但是,这不是正确的语法。有没有办法在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
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;