【问题标题】:How to fix PL/SQL: ORA-00932: inconsistent datatypes: expected CLOB got -如何修复 PL/SQL:ORA-00932:不一致的数据类型:预期的 CLOB 得到了 -
【发布时间】: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 你能给我看看吗?

标签: plsql


【解决方案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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多