首页 > 解决方案 > 如何将记录插入到oracle中cte的变量中?

问题描述

我有一个过程,我想将所有记录从 cte 提取到 Names 变量中。但是这段代码并没有写入 CTE 的名称。如何将记录提取到名称中,以便以后可以遍历名称并获取 field_name 的内容?

CREATE OR REPLACE PROCEDURE sp_market
IS
    Names VARCHAR2(32767);
BEGIN
    WITH CTE(sqql) As 
    (
      SELECT   field_name sqql FROM   pld_medicare_config  
    )  
    SELECT sqql into Names   from CTE;      
END sp_market;

标签: oraclestored-proceduresplsql

解决方案


我认为您最好的选择是创建一个关联数组并用于BULK COLLECT填充表格。以最简单的形式,代码如下所示:

CREATE OR REPLACE PROCEDURE sp_market IS
  TYPE lt_names IS TABLE OF VARCHAR2(32767) INDEX BY PLS_INTEGER;
  l_tNames lt_names;
BEGIN
  SELECT field_name
  BULK COLLECT INTO l_tNames
  FROM pld_medicare_config

  IF l_tNames.COUNT() > 0 THEN
    FOR i IN l_tNames.FIRST..l_tNames.LAST LOOP
      NULL; --REPLACE WITH YOUR LOGIC
    END LOOP;
  END IF;
END;
/

几点注意事项:

  • 我假设您已将 MAX_STRING_SIZE 设置为 EXTENDED。否则,你会有VARCHAR2这么大的问题。
  • 正如我所说,这是最简单的方法。如果您期待一个巨大的结果集,您将需要考虑将其分块。这篇 Oracle 博客文章非常有助于为您提供如何执行批量处理的多种选择。(博文

推荐阅读