【问题标题】:How do I insert big JSON data into an Oracle database(insert 15000 rows with 1 query)?如何将大 JSON 数据插入 Oracle 数据库(使用 1 个查询插入 15000 行)?
【发布时间】:2022-07-30 01:06:57
【问题描述】:

我有一个 API,每 10 秒给我 15000 行 json 数据。我使用这个tutorial,当我插入 5 行或更多行时插入是可以的,但是当我插入 15000 行时会出现错误PLS-00172: string literal too long。 我的代码:

 create table jt_test (
  CUST_NUM int, SORT_ORDER int, CATEGORY varchar2(100)
);

DECLARE 
  myJSON  CLOB := '[
  {"CUST_NUM": 12345, "SORT_ORDER": 1, "CATEGORY": "ICE CREAM"},
  {"CUST_NUM": 12345, "SORT_ORDER": 2, "CATEGORY": "ICE CREAM"},
  {"CUST_NUM": 12345, "SORT_ORDER": 3, "CATEGORY": "ICE CREAM"}
]';

BEGIN
  insert into jt_test
    select * from json_table ( myjson, '$[*]'
      columns ( 
        CUST_NUM, SORT_ORDER, CATEGORY
      )
    );
END; 

注意:我在使用 MSSql this link 之前,即使在一个查询中处理 20000 行也能完美运行。

我使用 Oracle19C 并使用 cx_Oracle 模块 python 连接并插入到数据库

【问题讨论】:

标签: cx-oracle oracle19c


【解决方案1】:

您可以在 Python 中创建该字符串并简单地传递它,而不是在 PL/SQL 中创建一个大的文字字符串(这是不允许的)。像这样的东西应该可以解决问题:

long_json_string = '''[
    {"CUST_NUM": 12345, "SORT_ORDER": 1, "CATEGORY": "ICE CREAM"},
    {"CUST_NUM": 12345, "SORT_ORDER": 2, "CATEGORY": "ICE CREAM"},
    {"CUST_NUM": 12345, "SORT_ORDER": 3, "CATEGORY": "ICE CREAM"}
  ]'''

sql = '''
  declare
    myJSON CLOB := :long_json_string;
  begin
    insert into jt_test
      select * from json_table ( myjson, '$[*]'
        columns ( 
          CUST_NUM, SORT_ORDER, CATEGORY
        )
      );
  END;'''

cursor.execute(sql, long_json_string=long_json_string)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-27
    • 1970-01-01
    • 2020-04-28
    • 2014-11-26
    • 2020-09-11
    • 1970-01-01
    • 2019-10-25
    相关资源
    最近更新 更多