我有一张表格,存储其他表格的名称。例如:
COL_TAB
--------------
TABLE_NAME
--------------
TAB1
TAB2
TAB3
我是一名有帮助的助手,可以为您进行文本翻译。以下是您需要翻译的内容:
我的目标是在这样的表上运行SQL查询:
SELECT * FROM (SELECT TABLE_NAME from COL_TAB WHERE TABLE_NAME = 'TAB1')
谢谢
我有一张表格,存储其他表格的名称。例如:
COL_TAB
--------------
TABLE_NAME
--------------
TAB1
TAB2
TAB3
我是一名有帮助的助手,可以为您进行文本翻译。以下是您需要翻译的内容:
我的目标是在这样的表上运行SQL查询:
SELECT * FROM (SELECT TABLE_NAME from COL_TAB WHERE TABLE_NAME = 'TAB1')
谢谢
create table tab1(a number);
create table tab2(b number);
create table tab3(c number);
insert into tab1 values(10);
insert into tab2 values(20);
insert into tab3 values(30);
create table col_tab(table_name varchar2(30), id number);
insert into col_tab values('TAB1', 1);
insert into col_tab values('TAB1', 2);
insert into col_tab values('TAB1', 3);
commit;
Query
select * from table(method4.dynamic_query(
q'[
select 'select * from '||table_name sql
from col_tab
where id = 1
]'));
结果:
A
--
10
DECLARE
-- Create a cursor on the table you are looking through.
CURSOR curTable IS
SELECT *
FROM MainTable;
recTable curTable%ROWTYPE;
vcQuery VARCHAR2(100);
BEGIN
-- Loop through all rows of MainTable.
OPEN curTable;
LOOP
FETCH curTable INTO recTable;
EXIT WHEN curTable%NOTFOUND;
-- Set up a dynamic query, with a WHERE example.
vcQuery := 'SELECT ColumnA, ColumnB FROM ' || recTable.Table_Name || ' WHERE 1 = 1';
-- Execute the query.
OPEN :dyn_cur FOR vcQuery;
END LOOP;
CLOSE curTable;
END;
/
试一下这个
CREATE OR REPLACE PROCEDURE TEST IS
sql_stmt VARCHAR2(200);
V_NAME VARCHAR2(20);
BEGIN
sql_stmt := 'SELECT * FROM ';
EXECUTE IMMEDIATE sql_stmt|| V_NAME;
END;
更新:存储过程中的选择语句无法正常工作。
在SQL Server中,您可以尝试使用SQL块。
Declare @name varchar2(50)
Select @name='Select * from '+TABLE_NAME from COL_TAB WHERE TABLE_NAME = 'TAB1'
EXEC(@name);
SELECT
语句而不在 PL/SQL 中存储结果。至少你需要一个 ref cursor 或类似的东西。 - user330315