【问题标题】:PL/SQL: ORA-00932: inconsistent datatypes: expected - got CLOBPL/SQL:ORA-00932:不一致的数据类型:预期 - 得到 CLOB
【发布时间】:2019-06-08 05:34:37
【问题描述】:

我想在存储过程中插入表时删除 XML 空节点。我已经尝试了一些代码,它会抛出错误

PL/SQL:ORA-00932:不一致的数据类型:预期 - 得到 CLOB。

所以请任何人帮助我找出 clob 错误。 int_content 列变量仅是 clob。

INSERT
      INTO int_details
        (
          int_rid,
          int_cpy,
          int_brn,
          int_sre,
          int_ree,
          int_type,
          int_filename,
          int_content,
          int_status,
          int_remarks,
          int_blob_content
        )
        VALUES
        (
          v_int_rid,
          p_cpy_rid,
          1,
          p_inty_rid,
          null,
          null,
          TO_CHAR(sysdate, 'DDMMYYHH24MISS')||'.xml',
          deleteXML(v_clob, '//*[not(text())][not(*)]').getclobval(),
          'Active',
          'EDI Generated on'||TO_CHAR(sysdate, 'DD-MON-YYY HH24:MI:SS'),
          v_blob
        );

【问题讨论】:

  • 值列表中间的那 3 个 null 是怎么回事?看起来您至少缺少一个逗号。为什么要将 null 连接到字符串上?这是一个非操作。另外,我建议您将值列表设为 11 行(不要在字符串连接中添加新行)或注释您的值,以便在有很多连接时知道它们是什么
  • 是的,现在改变了,请检查并给出任何想法
  • 第一个 TO_CHAR 有 ||前面没有任何东西,这不合适吗?
  • 但是现在您已经为所有 3 个空值添加了缺少的逗号,您有一个字符串 concat,它的左侧没有任何内容,并且您有 12 个值被插入到 11 列中
  • 对于空值,我会在一段时间后给出价值.. 现在我想知道 deleteXML(v_clob, '//*[not(text())][not( *)]').getclobval(), 行

标签: sql stored-procedures


【解决方案1】:

对于大而杂乱的插入,在值和列列表中用相同的行数排列它们:

INSERT
  INTO int_details
    (
      int_rid,
      int_cpy,
      int_brn,
      int_sre,
      int_ree,
      int_type,
      int_filename,
      int_content,
      int_status,
      int_remarks,
      int_blob_content
    )
    VALUES
    (
      v_int_rid,
      p_cpy_rid,
      1,
      p_inty_rid,
      null,
      null,
      TO_CHAR(sysdate, 'DDMMYYHH24MISS')||'.xml',
      deleteXML(v_clob, '//*[not(text())][not(*)]').getclobval(),
      'Active',
      'EDI Generated on'||TO_CHAR(sysdate, 'DD-MON-YYY HH24:MI:SS'),
      v_blob
    );

请注意,我已删除您的一个空值以减少到 11 个值。这可能不正确。我不知道你对这个案子有什么要求;你必须正确解决它

或注释 hardcides 值,或将代码块分成可视可数的东西,当事情多行时

INSERT
  INTO int_details
    (
      int_rid,
      int_cpy,
      int_brn,
      int_sre,
      int_ree,
      int_type,
      int_filename,
      int_content,
      int_status,
      int_remarks,
      int_blob_content
    )
    VALUES
    (
      v_int_rid,
      p_cpy_rid,
      1, --int_brn
      p_inty_rid,
      null, --int_ree
      null, --int_type

      --int_filename
      null
        ||TO_CHAR(sysdate, 'DDMMYYHH24MISS')||'.xml',

      --int_content
      deleteXML(v_clob, '//*[not(text())][not(*)]').getclobval(),

      --int_status
      'Active',

      --int_remarks
      'EDI Generated on'
      ||TO_CHAR(sysdate, 'DD-MON-YYY HH24:MI:SS'),

      v_blob
    );

【讨论】:

  • 感谢您的回答。是的,我已经纠正了。但仍然只显示相同的错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-16
  • 1970-01-01
  • 1970-01-01
  • 2018-04-30
相关资源
最近更新 更多