如何修复 PL/SQL:ORA-00932:不一致的数据类型:预期的 CLOB 得到了 -

Posted

技术标签:

【中文标题】如何修复 PL/SQL:ORA-00932:不一致的数据类型:预期的 CLOB 得到了 -【英文标题】:How to fix PL/SQL: ORA-00932: inconsistent datatypes: expected CLOB got - 【发布时间】:2016-01-04 08:15:32 【问题描述】:

我做了这个 pl sql 函数来检索 xml 格式的 oracle 数据。 但我得到了这个错误: PL/SQL:ORA-00932:不一致的数据类型:预期的 CLOB 得到了 -

这是我的 pl sql 代码:

create or replace PACKAGE  PAYROLL AS

        FUNCTION get_all_payroll_transactions return  clob;

END PAYROLL;

FUNCTION get_all_payroll_transactions return  clob IS
  ret  clob;

   BEGIN 
      SELECT XMLElement( "transaction", //this line shows error
                    XMLElement("salary_year", SALYR),
                    XMLElement("salary_month", SALMT),
                    XMLElement("employee_id", EMPID),
                    XMLElement("department_code", DPTID),
                    XMLElement("salary_head", SALHD),
                    XMLElement("description", DESCRP),
                    XMLElement("amount", ALAMT),
                    XMLElement("operator_id", OPID),
                    XMLElement("transaction_date", TRADT)
     ) AS clob into ret FROM PAYROLLFILE; 


COMMIT;

RETURN '<result><status affectedRow='||ret||'>success</status></result>';
EXCEPTION
WHEN OTHERS THEN
RETURN '<result><status>Error</status></result>';

   END get_all_payroll_transactions;

我认为可能存在一些 clob 、 xml cast 转换问题。 请帮助我。谢谢

【问题讨论】:

这类似于您的earlier question。而且你似乎仍然有同样的问题。 是的,请帮助@Tim Biegeleisen 我认为你在尝试投射时走在正确的轨道上,但括号不应该在最外面的 XMLElement 周围吗? @Tim Biegeleisen 你能给我看看吗? 【参考方案1】:

与其尝试强制转换,为什么不选择一个 XMLTYPE 然后使用 .getClobVal() 返回值?例如:

FUNCTION get_all_payroll_transactions return clob IS
  lXml xmltype;
BEGIN 
  SELECT XMLElement( "transaction",
                XMLElement("salary_year", SALYR),
                XMLElement("salary_month", SALMT),
                XMLElement("employee_id", EMPID),
                XMLElement("department_code", DPTID),
                XMLElement("salary_head", SALHD),
                XMLElement("description", DESCRP),
                XMLElement("amount", ALAMT),
                XMLElement("operator_id", OPID),
                XMLElement("transaction_date", TRADT)
 ) into lXml FROM PAYROLLFILE; 

RETURN '<result><status affectedRow='|| lXml.getClobVal() ||'>success</status></result>';
EXCEPTION
  WHEN OTHERS THEN
    RETURN '<result><status>Error</status></result>';

END get_all_payroll_transactions;

【讨论】:

以上是关于如何修复 PL/SQL:ORA-00932:不一致的数据类型:预期的 CLOB 得到了 -的主要内容,如果未能解决你的问题,请参考以下文章

与 GROUP BY 子句一起使用时,如何修复“ORA-00932:不一致的数据类型:预期 - 得到 CLOB”?

ORA-00932: 不一致的数据类型: 预期 - 得到 - ORA-06512:

ORA-00932不一致的数据类型预期 char 得到数字

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

ora-00932 不一致的数据类型预期数字得到 char plsql

Oracle:在 UNION 语句 ORA-00932 中,clob 列与自身不一致