【问题标题】:PL/SQL Convert to JSONPL/SQL 转换为 JSON
【发布时间】:2018-06-30 00:20:35
【问题描述】:

我是使用 PL/SQL 的新手(虽然我之前有一些 SQL 经验)。我一直在尝试将特定数据转换为 JSON。我在整个互联网上进行了研究,但我无法弄清楚我的代码出了什么问题。它确实产生了诸如“ORA-12801”之类的错误。这实际上是我正在处理的一个大型数据集。我只想使用游标循环,因为它比使用其他库更容易使用。因此,您可以在查看代码后提供意见或想法吗? **更新:我将 Toad for Oracle 用于数据。 **UPDATE2:我已经查看了其他链接,但这并没有解决我的问题,因为我不希望使用其他库,例如 PL/JSON。相反,我想在 PL/SQL 中使用简单的游标语句将表的列仅转换为 JSON。

DECLARE 
  links varchar2(750);

  CURSOR statement
  IS
    SELECT DISTINCT NAME, GROUP
    FROM ST.PEOPLE
    GROUP BY ST.PEOPLE.NAME, ST.PEOPLE.GROUP
    ORDER BY ST.PEOPLE.NAME ASC;

BEGIN 
  FOR line IN statement
  LOOP
    links := '{"source":"'|| line.NAME ||'", "target":"'|| line.GROUP||'""}';
  END LOOP;

  dbms_output.put_line(links);

END; 

失败:

ORA-12801: error signaled in parallel query server P045
ORA-12853: insufficient memory for PX buffers: current 16352K, max needed 702720K
ORA-04031: unable to allocate 65560 bytes of shared memory (“large pool”, “unknown object”, “large pool”, “PX msg pool”)
ORA-06512: at line 17

【问题讨论】:

  • 该查询在命令行上单独运行时是否会出现相同的错误?我能想到的只是PEOPLE 表定义了某种程度的并行性,因此一个普通的游标会给出一个PX 错误,并且它有太多的数据来执行这两个键上的DISTINCT/ORDER BY。它包含多少行?你真的需要所有这些吗?代码是否适用于较少的行数?
  • 不,我没有尝试在 cmd 行上运行查询。该表有大量行。目前,我正在尝试仅从“名称”和“组”列加载值。截至目前,该代码实际上是原始代码的修改版本。原始代码有更多关于 3 的列。
  • 我认为这个问题与 JSON 或 PL/SQL 没有太大关系,因为该错误似乎仅与游标有关,而不是任何特定于 JSON 的处理。可能您可以将问题更改为“使用 ORDER BY 的大型 GROUP BY 失败并出现 ORA-12853:PX 缓冲区内存不足”之类的问题,并仅显示查询。
  • 搜索ORA-12853,建议好像是alter table people noparallel或者减少parallel_max_servers参数设置。例如stackoverflow.com/q/36478807/230471

标签: json database loops plsql database-cursor


【解决方案1】:

我解决了我的问题,方法是使用数据库的一个按钮打开“DBMS 输出”上的输出以执行代码并且它有效。

【讨论】:

    猜你喜欢
    • 2013-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-08
    • 2014-03-31
    • 2015-09-16
    • 2012-04-21
    • 2019-09-11
    相关资源
    最近更新 更多