Sql 如何在Oracle中使用字符串选择表?
首先,我知道这个问题很模糊,所以如果你能更好地描述它,请随意编辑。 有一些表格集,如TEST_201812、TEST_201901等。我有另一个存储这些值的表:Sql 如何在Oracle中使用字符串选择表?,sql,oracle,Sql,Oracle,首先,我知道这个问题很模糊,所以如果你能更好地描述它,请随意编辑。 有一些表格集,如TEST_201812、TEST_201901等。我有另一个存储这些值的表: TEST_DATE: ID DATE 1 201810 2 201811 3 201812 4 201901 现在我想要的是通过使用TEST_DATE选择上面提到的表,例如TEST_201812。我知道这是错的,但像这样的事情: select * from TEST_(select DATE from T
TEST_DATE:
ID DATE
1 201810
2 201811
3 201812
4 201901
现在我想要的是通过使用TEST_DATE选择上面提到的表,例如TEST_201812。我知道这是错的,但像这样的事情:
select * from TEST_(select DATE from TEST_DATE where ID = 1)
有人知道如何做到这一点吗?说真的,这样的数据模型是一场灾难。如果您想单独保存月份,请使用单分区表 无论如何,这里有一个方法: 示例表和返回refcursor的函数:
SQL> create table test_201812 as select * From dept;
Table created.
SQL> create table test_date (id number, datum number);
Table created.
SQL> insert into test_date values (1, 201812);
1 row created.
SQL> create or replace function f_test (par_id in test_date.id%type)
2 return sys_refcursor
3 is
4 l_datum test_date.datum%type;
5 l_str varchar2(200);
6 l_rc sys_refcursor;
7 begin
8 select datum
9 into l_datum
10 from test_date
11 where id = par_id;
12
13 l_str := 'select * from test_' || l_datum;
14 open l_rc for l_str;
15 return l_rc;
16 end;
17 /
Function created.
测试:
SQL> select f_test(1) from dual;
F_TEST(1)
--------------------
CURSOR STATEMENT : 1
CURSOR STATEMENT : 1
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL>
说真的,这样的数据模型是一场灾难。如果您想单独保存月份,请使用单分区表 无论如何,这里有一个方法: 示例表和返回refcursor的函数:
SQL> create table test_201812 as select * From dept;
Table created.
SQL> create table test_date (id number, datum number);
Table created.
SQL> insert into test_date values (1, 201812);
1 row created.
SQL> create or replace function f_test (par_id in test_date.id%type)
2 return sys_refcursor
3 is
4 l_datum test_date.datum%type;
5 l_str varchar2(200);
6 l_rc sys_refcursor;
7 begin
8 select datum
9 into l_datum
10 from test_date
11 where id = par_id;
12
13 l_str := 'select * from test_' || l_datum;
14 open l_rc for l_str;
15 return l_rc;
16 end;
17 /
Function created.
测试:
SQL> select f_test(1) from dual;
F_TEST(1)
--------------------
CURSOR STATEMENT : 1
CURSOR STATEMENT : 1
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL>
您必须使用动态SQL,即立即执行。但是,您应该修复数据模型。您应该有一个表,表中有一列日期。您必须使用动态SQL,即立即执行。但是,您应该修复数据模型。您应该有一个表,表中有一列日期。我运行的代码与您编写的代码完全相同。最后,它返回游标。您使用哪种工具?如果是某个GUI蟾蜍、SQL开发人员,双击光标,查看其中的内容。因为,你从来没有说过一旦你得到了结果你会怎么做是的,我用的是蟾蜍。首先,我想选择表,然后删除它并创建一个带有新日期的新表。但现在我意识到,正如你所建议的,只使用一张桌子更实际、更合理;这就是你应该走的路。我运行了你写的代码。最后,它返回游标。您使用哪种工具?如果是某个GUI蟾蜍、SQL开发人员,双击光标,查看其中的内容。因为,你从来没有说过一旦你得到了结果你会怎么做是的,我用的是蟾蜍。首先,我想选择表,然后删除它并创建一个带有新日期的新表。但现在我意识到,正如你所建议的,只使用一张桌子更实际、更合理;这是你应该走的路。