如何通过';Sql中的s条件
嗨,我想做一个查询,它可以绘制代码的完整调用图 该表的列是 调用方类,调用方方法,被调用方类,被调用方方法 但是一些被调用的类以不必要的词开头。因此,当它被检测到时,我必须删除它们以使用connect by Previor 还有一件事。 一些被调用方方法列的值只包含方法名,而不包含参数 我想做的是如何通过';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
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表示此查询有错误。”-也就是说…?有效。但我不明白为什么它会起作用。。。我必须研究这个代码。谢谢@我补充了一点解释,不确定这是否对你有帮助…谢谢。这对我很有帮助