Sql 运行存储过程时出现ORA-01722错误

Sql 运行存储过程时出现ORA-01722错误,sql,oracle,stored-procedures,Sql,Oracle,Stored Procedures,我试图运行一个存储过程,但是当我使用一个有效的数字运行它时,它会给我一个ORA-01722错误。我检查以确保where子句中使用参数的列是数字类型。我检查了一下以确保记录存在。注意:当我取出c.charges-c.payment时,查询运行正常 create procedure patient_InfoNew(vpatientID NUMBER) IS x VARCHAR2(300); BEGIN select a.firstname || a.lastname ||

我试图运行一个存储过程,但是当我使用一个有效的数字运行它时,它会给我一个ORA-01722错误。我检查以确保where子句中使用参数的列是数字类型。我检查了一下以确保记录存在。注意:当我取出c.charges-c.payment时,查询运行正常

create procedure patient_InfoNew(vpatientID NUMBER) IS
  x VARCHAR2(300);
BEGIN
  select a.firstname ||
         a.lastname || ' ' ||
         a.ssn || ' ' ||
         a.streetname || ' ' ||
         a.phonenumber || ' ' ||
         b.servicedate || ' ' ||
         b.servicetype || ' ' ||
         c.charges - c.payment || ' ' ||
         e.name || ' ' ||
         e.insnumber into x
    from patient a,
         patientaccount b,
         patient_info c,
         patientinsurance d,
         insurance e
    where a.id = vpatientID AND
          e.id = d.insuranceid AND
          a.id = b.id AND
          a.id = c.id AND
          a.id = d.id AND
          b.servicedate = (Select MAX(servicedate)
                             from patientaccount
                             where id = vpatientID);

  DBMS_OUTPUT.PUT_LINE(x);
EXCEPTION
  WHEN VALUE_ERROR THEN                 
    DBMS_OUTPUT.PUT_LINE('Error ' || SQLCODE || SUBSTR(SQLERRM,1,80));  
  WHEN ZERO_DIVIDE THEN
     DBMS_OUTPUT.PUT_LINE('Divide by zero');
  WHEN OTHERS THEN
    IF SQL%NOTFOUND THEN
      DBMS_OUTPUT.PUT_LINE('No such record was found');
    END IF;

    DBMS_OUTPUT.PUT_LINE('Error ' || SQLCODE || SUBSTR(SQLERRM,1,80));
END;
以下是我得到的错误:

No such record was found 
Error -1722ORA-01722: invalid number 
PL/SQL procedure successfully completed.

将减法用括号括起来:
(c.charges-c.payment)

如果你不这样做,你实际上是在尝试减去字符串(减号左边的所有内容都连接在一起,减号右边的所有内容都连接在一起)

任何一方的计算结果都不是有效数字

有关操作顺序的更多信息,请参见:


请注意,减法和串联是同一级别的,因此需要用括号来阐明表达式的含义。

那么,c.charges和c.payment的值是多少?表中的数据类型是什么?@OldProgrammer对于我正在测试的示例,它们的值都是250,都是数字类型。请编辑您的问题并包括此查询中涉及的所有表的定义。同样令人感兴趣的是PATIENT_INFO.ID中的值。谢谢