如何在oracle中从cte向变量插入记录?

如何在oracle中从cte向变量插入记录?,oracle,stored-procedures,plsql,Oracle,Stored Procedures,Plsql,我有一个过程,在这个过程中,我希望将所有记录从cte提取到变量名称中。但该代码并没有写入CTE的名称中。如何将记录提取到名称中,以便以后可以循环遍历名称并获取字段\ u name的内容 CREATE OR REPLACE PROCEDURE sp_market IS Names VARCHAR2(32767); BEGIN WITH CTE(sqql) As ( SELECT field_name sqql FROM pld_medicare_con

我有一个过程,在这个过程中,我希望将所有记录从cte提取到变量名称中。但该代码并没有写入CTE的名称中。如何将记录提取到名称中,以便以后可以循环遍历名称并获取字段\ u 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;
从CTE中将sqql选择为名称

您正在将多个从表返回的行分配给一个变量,这将失败

您可以简单地使用游标进行循环,这将创建一个隐式游标,您可以通过名称进行循环:

CREATE OR REPLACE PROCEDURE sp_market IS
BEGIN
    FOR i IN (
        SELECT field_name
        FROM pld_medicare_config
        ) 
    LOOP
        -- Your logic goes here
        dbms_output.put_line(i.field_name);
    END LOOP;
END;
/
从CTE中将sqql选择为名称

您正在将多个从表返回的行分配给一个变量,这将失败

您可以简单地使用游标进行循环,这将创建一个隐式游标,您可以通过名称进行循环:

CREATE OR REPLACE PROCEDURE sp_market IS
BEGIN
    FOR i IN (
        SELECT field_name
        FROM pld_medicare_config
        ) 
    LOOP
        -- Your logic goes here
        dbms_output.put_line(i.field_name);
    END LOOP;
END;
/

我认为最好的办法是创建一个关联数组,并使用
批量收集
填充表。以最简单的形式,代码如下所示:

创建或替换程序sp\U市场
类型lt_names是由PLS_整数组成的VARCHAR2(32767)索引表;
l_tNames lt_name;
开始
选择字段名称
批量收集到l_tNames
从pld_医疗保险_配置
如果l_tNames.COUNT()大于0,则
因为我在l\u tNames.第一个..l\u tNames.最后一个循环
无效--替换为你的逻辑
端环;
如果结束;
结束;
/
请注意:

  • 我假设您已将“最大字符串大小”设置为“扩展”。否则,您将遇到
    VARCHAR2
    那么大的问题
  • 正如我所说,这是最简单的方法。如果你期待一个巨大的结果集,你会想把它分块。这篇Oracle博客文章非常有助于为您提供如何执行批量处理的多种选项。()

我认为最好的办法是创建一个关联数组,并使用
批量收集
填充表。以最简单的形式,代码如下所示:

创建或替换程序sp\U市场
类型lt_names是由PLS_整数组成的VARCHAR2(32767)索引表;
l_tNames lt_name;
开始
选择字段名称
批量收集到l_tNames
从pld_医疗保险_配置
如果l_tNames.COUNT()大于0,则
因为我在l\u tNames.第一个..l\u tNames.最后一个循环
无效--替换为你的逻辑
端环;
如果结束;
结束;
/
请注意:

  • 我假设您已将“最大字符串大小”设置为“扩展”。否则,您将遇到
    VARCHAR2
    那么大的问题
  • 正如我所说,这是最简单的方法。如果你期待一个巨大的结果集,你会想把它分块。这篇Oracle博客文章非常有助于为您提供如何执行批量处理的多种选项。()