【问题标题】:Gather statistics for nested table收集嵌套表的统计信息
【发布时间】:2021-03-15 19:17:29
【问题描述】:

如何收集 Oracle 包中使用的嵌套表的统计信息。那可能吗? 我已经通过 GTT 完成了它,但无法对嵌套表类型对象执行相同的操作。

create or replace TYPE "TO_CNF_PYE_BSE_OBJ" AS OBJECT(
    FAP_INR_IDR        VARCHAR2(50)
);
create or replace TYPE "TO_CNF_PYE_BSE_TYP" AS TABLE OF TO_CNF_PYE_BSE_OBJ;

内部代码我使用集合从to_cnf_bse_pye 中选择记录作为嵌套表类型:

CURSOR lv_cur (p_in_del_cri_days NUMBER) IS SELECT to_cnf_pye_bse_obj(fap_inr_idr) FROM to_cnf_pye_bse 

【问题讨论】:

  • 嵌套表是数据库表的对象类型列吗?还是您的意思是 PL/SQL 集合?以及你的包是如何使用它的?
  • edit 您的问题包含minimal reproducible example,因为我认为您使用的术语不正确。 NESTED TABLE 是一个 SQL 构造,其中定义在 SQL 范围内的集合存储(嵌套)在另一个表中。集合是使用 SQL 范围内的 CREATE TYPE 语句或 PL/SQL 范围内的 TYPE 语句定义的数据类型,是内存中数据结构的声明。从您之前的评论来看,您似乎在谈论集合而不是嵌套表。
  • 做同样的事情。请您说如果我以这种方式使用光标,是否有使用收集统计信息的出路?
  • 嵌套表(甚至是集合数据类型)如何与问题相关?您只在游标中使用基本对象数据类型,NOT 集合数据类型。
  • 您之前的问题 stackoverflow.com/q/66634096/1509264 的副本已作为 stackoverflow.com/questions/30461235/… 的副本关闭。不要重复问同一个问题;如果您认为第一个问题不应该关闭,请要求重新打开它。

标签: oracle plsql


【解决方案1】:

是的,嵌套表只是另一个表:

CREATE TYPE string_list AS TABLE OF VARCHAR2(20);

CREATE TABLE table_name (
  id   NUMBER,
  data string_list
) NESTED TABLE data STORE AS table_name__data;

那么你可以这样做:

BEGIN
  DBMS_STATS.GATHER_TABLE_STATS( 'SCHEMA_NAME', 'TABLE_NAME__DATA');
END;
/

db小提琴here


更新

内部代码我使用集合从 to_cnf_bse_pye 中选择记录作为嵌套表类型:

CURSOR lv_cur (p_in_del_cri_days NUMBER) IS SELECT to_cnf_pye_bse_obj(fap_inr_idr) FROM to_cnf_pye_bse

不,DBMS_STATS package 没有任何收集游标统计信息的方法。

但是,您可以收集基础to_cnf_pye_bse 表的统计信息。

(顺便说一句,您没有使用 TO_CNF_PYE_BSE_TYP 集合数据类型;您的光标正在获取基本对象类型,因此嵌套表似乎与问题完全无关。) p>

【讨论】:

  • 我不想以这种形式使用嵌套表,而是:CURSOR lv_cur (p_in_del_cri_days NUMBER) IS SELECT to_cnf_pye_bse_obj(fap_inr_idr) FROM to_cnf_pye_bse
  • @TBose 查看我对您关于使用正确术语的问题的评论。你问的是嵌套表,所以我回答的是嵌套表;如果您的意思是别的,那么您需要提供minimal reproducible example(在您的问题中而不是在 cmets 中)来解释您在说什么。
猜你喜欢
  • 2017-05-15
  • 1970-01-01
  • 2018-01-13
  • 2021-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多