Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.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中的s条件_Sql_Case_Conditional Statements_Connect By_Tibero - Fatal编程技术网

如何通过';Sql中的s条件

如何通过';Sql中的s条件,sql,case,conditional-statements,connect-by,tibero,Sql,Case,Conditional Statements,Connect By,Tibero,嗨,我想做一个查询,它可以绘制代码的完整调用图 该表的列是 调用方类,调用方方法,被调用方类,被调用方方法 但是一些被调用的类以不必要的词开头。因此,当它被检测到时,我必须删除它们以使用connect by Previor 还有一件事。 一些被调用方方法列的值只包含方法名,而不包含参数 我想做的是 SELECT caller_class, caller_method, callee_class, callee_method FROM call_rel START WITH

嗨,我想做一个查询,它可以绘制代码的完整调用图

该表的列是 调用方类,调用方方法,被调用方类,被调用方方法

但是一些被调用的类以不必要的词开头。因此,当它被检测到时,我必须删除它们以使用connect by Previor

还有一件事。 一些被调用方方法列的值只包含方法名,而不包含参数

我想做的是

SELECT 
    caller_class, caller_method, callee_class, callee_method
FROM 
    call_rel
START WITH 
    caller_class ='test.callee.class'
    AND
callee_method = 'test(java.lang.Object arg0)'

CONNECT BY NOCYCLE
PRIOR callee_class = caller_class 
AND 
PRIOR
    CASE WHEN INSTR(callee_method, '(', 1, 1) > 0 --this means method name only
    THEN callee_method LIKE CONCAT(caller_method, '%')
    ELSE callee_method = caller_method
    END;

db说这个查询有一个错误

我想做的是,如果条件匹配,使用equals或not,使用like作为优先条件


如何修复此sql查询…

您不能使用大小写表达式来决定应用哪些条件。您可以将布尔逻辑与
以及
一起使用

你似乎想要这样的东西:

PRIOR callee_class = caller_class 
AND (
  (
    INSTR(callee_method, '(', 1, 1) > 0
    AND PRIOR callee_method LIKE CONCAT(caller_method, '%')
  )
  OR
  (
    INSTR(callee_method, '(', 1, 1) = 0
    AND PRIOR callee_method = caller_method
  )
);
我已经将条件拆分为多行,并缩进以尝试更清楚地显示逻辑


第一行来自原始代码并始终应用。然后,第一个
表示下一个条件也必须为真。第二个条件实际上是一个复合条件:
callee\u方法
有一个括号,而
like
是真的;或者
callee\u方法
没有括号,并且
=
为真。

“db表示此查询有错误。”-也就是说…?有效。但我不明白为什么它会起作用。。。我必须研究这个代码。谢谢@我补充了一点解释,不确定这是否对你有帮助…谢谢。这对我很有帮助