Oracle 关于频繁项集的PL/SQL问题

Oracle 关于频繁项集的PL/SQL问题,oracle,plsql,bigdata,analysis,Oracle,Plsql,Bigdata,Analysis,我正试图构建一个PL/SQL应用程序,从一组给定数据中挖掘频繁项集,但遇到了一些障碍。我的PL/SQL技能没有我希望的那么好,所以也许你们中的一位可以帮助我更好地理解这一点 首先,我使用Oracle数据挖掘过程:*DBMS\u frequency\u ITEMSET.FI\u TRANSACTIONAL* 在阅读文档时,我遇到了下面的示例,我使用该示例查询了我的数据集: CREATE OR REPLACE TYPE FI_VARCHAR_NT AS TABLE OF NUMBER; / CRE

我正试图构建一个PL/SQL应用程序,从一组给定数据中挖掘频繁项集,但遇到了一些障碍。我的PL/SQL技能没有我希望的那么好,所以也许你们中的一位可以帮助我更好地理解这一点

首先,我使用Oracle数据挖掘过程:*DBMS\u frequency\u ITEMSET.FI\u TRANSACTIONAL*

在阅读文档时,我遇到了下面的示例,我使用该示例查询了我的数据集:

CREATE OR REPLACE TYPE FI_VARCHAR_NT AS TABLE OF NUMBER;
/

CREATE TYPE fi_res AS OBJECT (
itemset      FI_VARCHAR_NT,
support      NUMBER,
length       NUMBER,
total_tranx  NUMBER
);
/

CREATE TYPE fi_coll AS TABLE OF fi_res;
/

create or replace 
PROCEDURE freq_itemset_test is
    cursor freqC is
          SELECT itemset
          FROM table(
            CAST(DBMS_FREQUENT_ITEMSET.FI_TRANSACTIONAL(CURSOR(SELECT sale.customerid, sale.productid FROM Sale INNER JOIN Customer ON customer.customerid = sale.customerid WHERE customer.region = 'Canada' )
                  ,0,2, 2, NULL, NULL) AS fi_coll));   
      coll_nt  FI_VARCHAR_NT;
    num_rows int;
    num_itms int;
  BEGIN
    num_rows := 0;
    num_itms := 0;
    OPEN freqC;
    LOOP
      FETCH freqC INTO coll_nt;
      EXIT WHEN freqC%NOTFOUND;
      num_rows := num_rows + 1;
      num_itms := num_itms + coll_nt.count;
    END LOOP;
    DBMS_OUTPUT.PUT_LINE('Rows: ' || num_rows || ' Columns: ' || num_itms);
  CLOSE freqC;
END;
我使用Oracle FI_TRANSACTIONAL over straight SQL的理由是,我需要对K的多个动态值重复此分析,那么为什么要重新发明轮子呢?最终,我的目标是引用过程返回的每个单独的项目集,并根据某些查询逻辑返回具有最高支持的集。我将把这个PL/SQL块合并到另一个PL/SQL块中,根据数据内容将查询中的文本从“Canada”更改为多个其他区域

我的问题是:如何实际获取游标(freqC)返回的数据的编程引用?显然,我不需要计算行和列,但这是示例的一部分。在找到最常出现的项目集之后,我想使用DBMS打印行打印项目集。当我在调试器中查看这一点时,我看到每次抓取游标实际上都返回一个项目集(在本例中,k=2,所以有两个项目)。但我如何通过编程方式实际接触它们呢?我想抢夺布景本身以及现场支持


一如既往,感谢大家分享他们的才华

您正在将数据提取到嵌套表中。因此,要查看其中的数据,需要循环嵌套表:

FOR i IN coll_nt.FIRST .. coll_nt.LAST
LOOP
    dbms_output.put_line(i||': '||coll_nt(i));
END LOOP;
有关嵌套表和其他类型集合的更多信息,请参阅以下位置的演示文稿:

。“对游标返回的数据的编程引用”是什么意思?将数据插入到具有序列标识列的表中可以解决问题吗?我正在尝试引用freqC返回的实际值。每个迭代都在“coll\n nt”中设置了一个项,但我不确定如何通过编程访问它。如果您查看上面的示例代码,其中一行使用.count属性来递增“num_itms”。我是否可以这样访问coll_nt中的数据?我目前对这个例子的理解是,我需要访问一个表中的数字表。插入带有序列的数据不会有帮助,因为数据已经存在。fi_事务过程正确地挖掘数据,但我需要访问它。