Sql 内部连接条件被忽略-看起来像Oracle错误

Sql 内部连接条件被忽略-看起来像Oracle错误,sql,oracle,join,parameters,conditional-statements,Sql,Oracle,Join,Parameters,Conditional Statements,这是怎么可能的?:如果我用文字“MT202”替换消息\u格式\u名称,查询将按预期工作。否则,它将返回2行,而不是预期的1行——就像该条件被注释掉一样 由于某种奇怪的原因,传入存储过程的参数值似乎与ms.message_format_name中的值不相等 如果你需要更多的细节,请告诉我。 谢谢 这不是Oracle的错误。首先,决不能在FROM子句中使用逗号。您应该始终使用显式JOIN语法 但这不是你的具体问题。可变分辨率和范围是很重要的 当查询中有一个引用,例如interface\u name,

这是怎么可能的?:如果我用文字“MT202”替换消息\u格式\u名称,查询将按预期工作。否则,它将返回2行,而不是预期的1行——就像该条件被注释掉一样

由于某种奇怪的原因,传入存储过程的参数值似乎与ms.message_format_name中的值不相等

如果你需要更多的细节,请告诉我。 谢谢


这不是Oracle的错误。首先,决不能在
FROM
子句中使用逗号。您应该始终使用显式
JOIN
语法

但这不是你的具体问题。可变分辨率和范围是很重要的

当查询中有一个引用,例如
interface\u name
,Oracle会首先查找具有该名称的列。它从未看到变量。将变量命名为有区别的名称,因此最终的代码更像这样:

   . . .
   FROM payments.multi_value_lookup_config mvlc JOIN
        payments.message_source ms
        ON  ms.pk_message_source = mvlc.fk_pk_message_source 
   WHERE  ms.interface_name = v_interface_name
          ms.message_format_name = v_message_format_name /*'MT202'*/
          mvlc.mapping_column_name  = v_source_field
          mvlc.lookup_category_type = v_determined_field_type

这不是Oracle的错误。首先,决不能在
FROM
子句中使用逗号。您应该始终使用显式
JOIN
语法

但这不是你的具体问题。可变分辨率和范围是很重要的

当查询中有一个引用,例如
interface\u name
,Oracle会首先查找具有该名称的列。它从未看到变量。将变量命名为有区别的名称,因此最终的代码更像这样:

   . . .
   FROM payments.multi_value_lookup_config mvlc JOIN
        payments.message_source ms
        ON  ms.pk_message_source = mvlc.fk_pk_message_source 
   WHERE  ms.interface_name = v_interface_name
          ms.message_format_name = v_message_format_name /*'MT202'*/
          mvlc.mapping_column_name  = v_source_field
          mvlc.lookup_category_type = v_determined_field_type

@Aleksej是的,我相信我对甲骨文一无所知:-)@Aleksej是的,我相信我对甲骨文一无所知:-)非常感谢你,戈登!就这样。(查询最初是用ANSI格式编写的,顺便说一句,这个表单只是我尝试过的事情之一)。解决范围界定问题的另一种方法是将函数/过程名称预先添加到参数中,例如
ms.message\u format\u name=insert\u mapping.message\u format\u name
,完全避免范围问题肯定更容易。非常感谢你,戈登!就这样。(查询最初是用ANSI格式编写的,顺便说一句,这个表单只是我尝试过的事情之一)。解决范围界定问题的另一种方法是将函数/过程名称预先添加到参数中,例如
ms.message\u format\u name=insert\u mapping.message\u format\u name
,完全避免范围问题肯定更容易。