gpt4 book ai didi

oracle - 动态选择分区

转载 作者:行者123 更新时间:2023-12-04 10:25:13 25 4
gpt4 key购买 nike

我有一张有几百个分区的表,我通常对最新的 35 个分区感兴趣。

因此,我正在尝试创建可以动态访问这些 View 的 View 。即始终使用最新的以防创建。

查询:

  select PARTITION_NAME,
PARTITION_POSITION,
NUM_ROWS,
AVG_ROW_LEN
from all_tab_partitions
where
table_name = 'MY_TABLE'
AND PARTITION_NAME <> 'P_LAST'
AND PARTITION_POSITION < (SELECT MAX(PARTITION_POSITION)
FROM all_tab_partitions) - 35
order by 2 DESC
;

似乎返回了我感兴趣的分区名称,但是,我无法使用它的结果来选择分区。例如。:
CREATE OR REPLACE VIEW MY_VIIEW AS
WITH t AS ( [Above query] )
SELECT * FROM
MY_TABLE PARTITION (SELECT /*+ FIRST_ROWS(1) */ PARTITION_NAME
from t);

(不是实际 View ,只是一个例子)

那我该怎么做呢?如何创建一个始终访问最新分区的 View (“MAX”的执行)?

我正在使用 Oracle 10g

谢谢

最佳答案

您只能使用 PL/SQL 来完成

create or replace package my_table_ is
type t_records is table of my_table%rowtype;
function getpart(c_parts sys_refcursor) return t_records pipelined;
end;

create or replace package body my_table_ is
function getpart(c_parts sys_refcursor) return t_records pipelined is
v_partition all_tab_partitions.partition_name%type;
v_row my_table%rowtype;
c_mytab sys_refcursor;
begin
loop
fetch c_parts into v_partition;
exit when c_parts%notfound;
open c_mytab for 'select * from my_table partition ('||v_partition||')';
loop
fetch c_mytab into v_row;
exit when c_mytab%notfound;
pipe row (v_row);
end loop;
end loop;
end;
end;

现在你可以
select * from table(my_table_.getpart(cursor(<QUERY_RETURNING_PARTITION_NAMES>)));

关于oracle - 动态选择分区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22357232/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com