获取ORA-01722:尝试执行函数时无效的数字

时间:2017-11-08 05:48:53

标签: sql oracle plsql

这就是我创建函数的方法

CREATE OR REPLACE FUNCTION udf_FullName(P_CUSTOMER_NO IN number)
RETURN VARCHAR
IS
  var_fullname VARCHAR(255);
BEGIN
  SELECT C.LNAME + ',' + C.FNAME AS FullName INTO var_fullname
    FROM Customer C
    WHERE C.CUSTOMER_NO = P_CUSTOMER_NO;
    RETURN var_fullname;
END;

这就是我试图调用函数的方式

DECLARE
  var_fullname VARCHAR(255);
BEGIN
  dbms_output.put_line(rpad('Customer #',15) || rpad('Full Name',15));
  FOR rec IN (SELECT customer_no From customer)
  LOOP
    SELECT udf_FullName(rec.customer_no) AS FullName INTO var_fullname
    FROM dual;
    dbms_output.put_line(rpad(rec.customer_no,15) || rpad(var_fullname,15));
  END LOOP;
END;

初始化customer表时,customer_no列被声明为类型编号(38,0)。我认为这与我的问题有关,但我已经尝试了一切我能想到的解决方法。

1 个答案:

答案 0 :(得分:0)

问题出在这条线上。

SELECT C.LNAME + ',' + C.FNAME AS FullName

在SQL中,我们使用||进行连接而不是+