SELECT查询错误ORA-01722(无效数字)

时间:2019-06-26 04:02:45

标签: sql oracle

我的查询遇到此错误消息,无法解决。谁能看看我的查询并分享一些见解?非常感谢

Oracle数据库

SELECT BB_BB60.USERS.FIRSTNAME, BB_BB60.USERS.LASTNAME, 
       BB_BB60.USERS.STUDENT_ID AS IDNUMBER, BB_BB60.USERS.USER_ID AS USERNAME,
       REPLACE(CRSADMIN.OCCURRENCE.CODE, '/','_') AS DESCRIPTION, 
       'Moodle_2019' AS PASSWORD, 
       SUBSTR(BB_BB60.COURSE_MAIN.COURSE_ID, 0, 7) AS DEPARTMENT 
  FROM (CRSADMIN.OCCURRENCE 
        INNER JOIN CRSADMIN.REQ_OCC ON CRSADMIN.OCCURRENCE.PK = CRSADMIN.REQ_OCC.OCC_PK1) 
        INNER JOIN ((BB_BB60.COURSE_USERS INNER JOIN BB_BB60.COURSE_MAIN ON BB_BB60.COURSE_USERS.CRSMAIN_PK1 = BB_BB60.COURSE_MAIN.PK1) 
        INNER JOIN BB_BB60.USERS ON BB_BB60.COURSE_USERS.USERS_PK1 = BB_BB60.USERS.PK1) ON CRSADMIN.REQ_OCC.REQ_PK1 = BB_BB60.COURSE_MAIN.PK1 
 WHERE (((BB_BB60.COURSE_MAIN.COURSE_ID) = 'PARA602_2019_02'));

1 个答案:

答案 0 :(得分:0)

可能的问题在于您的数据模型。在至少一个JOIN准则中,您要将数字列连接到varchar2列,这导致隐式转换为数字。但是,您的varchar2列包含不是数字的字符串,因此,连接会发送ORA-01722。

在不知道您的表结构的情况下,我们无法识别问题列,因此您需要自己解决问题。

一种解决方案是将数字列转换为字符串,例如

http://www.example.com/some/path/to/a/file.xml?foo=bar#test

这可能会影响性能(优化程序将不会使用 on t1.vcol_pk = to_char(t2.ncol_pk) 上的索引)。

一个更好的解决方案是修复数据模型,这样您就不需要比较字符串和数字,也无需清理数据。