oracle - 如何将记录插入到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;
解决方案
我认为您最好的选择是创建一个关联数组并用于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 博客文章非常有助于为您提供如何执行批量处理的多种选择。(博文)
推荐阅读
- javascript - 如何在 Rails 6 中使用 Reveal.js?
- macos - macOS 上的法语键盘,改变波浪号 ~ 键的行为
- r - R 向量 - 找到可以从两个向量的差异中获得的最大正结果的计数
- c - 使用另一个枚举进行枚举初始化
- google-chrome - 如何让 Electron 使用 chrome://flags/#enable-force-dark
- java - 使用 Apache HTTPAsyncClient 为每个 HTTPS 请求自定义 SSLContext
- python - 如何处理 pytz 的 POSIX 时区信息(如 CST)?
- grep - 比较 Ansible 中的两个文件列表
- arrays - 过滤的多个 FIND 条件
- python - numpy vs. python:修补圆形函数