如何通过名称获取 table 对象? (甲骨文SQL)
How to get table object by name? (Oracle SQL)
我试图通过按名称查询表然后在这些表中查询来在我的数据库中找到结果表的特定子集。
我知道我可以获得这样的表格列表:
SELECT table_name FROM all_tables WHERE table_name LIKE 'MY_RESULTS_%'
但我想不通的是如何在另一个 select 语句中使用该列表。例如,我想做这样的事情:
-- DOESN'T WORK --
SELECT table_name FROM all_tables
WHERE table_name LIKE 'OUTPUTDATA_%'
AND get_table_by_name(table_name).my_value_col = 'Special Value';
这是在 Oracle 数据库上 SQL 开发人员。
使用 Dynamic SQL
和 cursor
:
DECLARE
CURSOR all_tables IS
SELECT table_name
FROM all_tables
WHERE TABLE_NAME like 'MY_RESULTS_%'
ORDER BY TABLE_NAME ;
row_count pls_integer;
BEGIN
FOR rslt IN all_tables LOOP
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM '
|| rslt.TABLE_NAME || ' where '
||rslt.TABLE_NAME||'.my_value_col= ''Special Value''' INTO row_count;
--here if the specific table.specificcolumn has the specific value print it
if row_count>=1 THEN
BEGIN
DBMS_OUTPUT.PUT_LINE(rslt.TABLE_NAME);
END;
END IF;
END LOOP;
END;
我试图通过按名称查询表然后在这些表中查询来在我的数据库中找到结果表的特定子集。
我知道我可以获得这样的表格列表:
SELECT table_name FROM all_tables WHERE table_name LIKE 'MY_RESULTS_%'
但我想不通的是如何在另一个 select 语句中使用该列表。例如,我想做这样的事情:
-- DOESN'T WORK --
SELECT table_name FROM all_tables
WHERE table_name LIKE 'OUTPUTDATA_%'
AND get_table_by_name(table_name).my_value_col = 'Special Value';
这是在 Oracle 数据库上 SQL 开发人员。
使用 Dynamic SQL
和 cursor
:
DECLARE
CURSOR all_tables IS
SELECT table_name
FROM all_tables
WHERE TABLE_NAME like 'MY_RESULTS_%'
ORDER BY TABLE_NAME ;
row_count pls_integer;
BEGIN
FOR rslt IN all_tables LOOP
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM '
|| rslt.TABLE_NAME || ' where '
||rslt.TABLE_NAME||'.my_value_col= ''Special Value''' INTO row_count;
--here if the specific table.specificcolumn has the specific value print it
if row_count>=1 THEN
BEGIN
DBMS_OUTPUT.PUT_LINE(rslt.TABLE_NAME);
END;
END IF;
END LOOP;
END;