我想構造一個查詢,其中表名基于另一個表的列 mod 12。例如:
SELECT *
FROM table_b_XX
其中 XX 由 table_a.column_a % 12 確定。
uj5u.com熱心網友回復:
假設你有這樣的表:
SQL> create table table_a as
2 select 1212 as column_a from dual;
Table created.
由于以下結果回傳0,我們需要table_b_00所以我將創建它:
SQL> select mod(1212, 12) from dual;
MOD(1212,12)
------------
0
SQL> create table table_b_00 as select 'table 00' name from dual;
Table created.
SQL> create table table_b_01 as select 'table 01' name from dual;
Table created.
現在,創建一個回傳參考游標的函式;它從名稱由table_a內容幫助設計的表中選擇行:
SQL> create or replace function f_test return sys_refcursor
2 is
3 l_str varchar2(200);
4 rc sys_refcursor;
5 begin
6 select 'select * from table_b_' || lpad(mod(a.column_a, 12), 2, '0')
7 into l_str
8 from table_a a;
9
10 open rc for l_str;
11 return rc;
12 end f_test;
13 /
Function created.
讓我們試試看:
SQL> select f_test from dual;
F_TEST
--------------------
CURSOR STATEMENT : 1
CURSOR STATEMENT : 1
NAME
--------
table 00
對; 那是 的內容table_b_00。
uj5u.com熱心網友回復:
考慮以下元代碼:
DECLARE
n VARCHAR2(32767);
r VARCHAR2(32767);
BEGIN
SELECT column_a INTO name FROM table_a;
EXECUTE IMMEDIATE 'SELECT r FROM table_b_'||n INTO r;
END;
/
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/314332.html
