Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql ORA-01722:无效数字,但删除DECODE语句将返回结果_Sql_Oracle_Ora 01722 - Fatal编程技术网

Sql ORA-01722:无效数字,但删除DECODE语句将返回结果

Sql ORA-01722:无效数字,但删除DECODE语句将返回结果,sql,oracle,ora-01722,Sql,Oracle,Ora 01722,我在下面有一个SQL查询,其中我得到一个ORA-01722:无效数字错误。相当普遍 SELECT pt.DISPLAYNAME PARAM_NAME, DECODE(rp.PARAMTYPE, 'POVLOC', l.PARTNAME, p.PARAM_VALUE) PARAM_VALUE FROM schema2.OTHER_PARAMS p JOIN schema2.TPARAMETER rp ON rp.R_ID = 10230 AND p.PARAM_NAME = rp.PAR

我在下面有一个SQL查询,其中我得到一个ORA-01722:无效数字错误。相当普遍

SELECT pt.DISPLAYNAME PARAM_NAME,
  DECODE(rp.PARAMTYPE, 'POVLOC', l.PARTNAME, p.PARAM_VALUE) PARAM_VALUE
FROM schema2.OTHER_PARAMS p
JOIN schema2.TPARAMETER rp
  ON rp.R_ID = 10230
 AND p.PARAM_NAME = rp.PARAMNAME
JOIN schema2.TPARAMETER_TL pt
  ON rp.PARAMID = pt.PARAMID
 AND pt.LANGUAGE = 'en'
LEFT JOIN schema2.TPARTITION l
  ON l.PARTITION = p.PARAM_VALUE
WHERE p.F_ID = 3669
ORDER BY rp.SEQ
一旦我删除了DECODE语句并只使用PARAMTYPE列,我就会得到结果。1列带有PARAM_NAME DISPLAYNAME列,另一列带有PARAM_VAL PARAMTYPE列。解码中的所有数据类型都是Varchar,因此没有从number到char的转换,反之亦然。这通常是发生此无效数字错误的最常见原因


如果上面不清楚,我想做的是在PARAMTYPE列中插入一些If/then逻辑来更新它。我正在考虑对PARAMTYPE变量使用CASE语句,但我不确定最好的方法是什么。

如果解码结果值同时包含number和varchar,那么应该强制第一个为varchar,以避免转换错误。在您的情况下,只需将l.PARTNAME替换为TO_CHARl.PARTNAME。

您可以将其写入以下内容:选择pt.DISPLAYNAME参数名称、rp.PARAMTYPE、l.PARTNAME、p.PARAM_值FROM。。。并告诉结果,特别是rp.PARAMTYPE、l.PARTNAME、p.PARAM_VALUE的值,如果它是最少的PARAMTYPE作为字符串发送到_char或其他。这是一个类型转换问题。我是否要围绕解码进行转换?不确定syntaxUse TO_CHAR函数-解码为_CHARrp.PARAMTYPE、'POVLOC',l.PARTNAME、p.PARAM_值PARAM_值是否为F_ID和R_ID数字?一个常见的原因是STRING_COL=number,Oracle会将其转换为_NUMBERSTRING_COL=number,因此有发生该错误的风险