PL/SQL模糊代码

PL/SQL模糊代码,sql,oracle,plsql,plsqldeveloper,Sql,Oracle,Plsql,Plsqldeveloper,在我的工作中,我遇到了关于PL/SQL的晦涩代码,请你为我解释一下,这意味着什么 PL/SQL执行“选择”请求,例如 DECODE(SIGN(ABS(SUM(amount))) - :3, -1, 0, SUM(AMOUNT)), 什么是“-:3”?它的功能是什么?这可以作为一个很好的例子,说明如何分解一行令人困惑的代码,以了解发生了什么。您没有包含整个查询,因此有些内容必须脱离上下文。首先,添加一些空格以澄清单个嵌套函数,并使其更具可读性: DECODE( SIGN( ABS( SUM(a

在我的工作中,我遇到了关于PL/SQL的晦涩代码,请你为我解释一下,这意味着什么

PL/SQL执行“选择”请求,例如

DECODE(SIGN(ABS(SUM(amount))) - :3, -1, 0, SUM(AMOUNT)),

什么是“-:3”?它的功能是什么?

这可以作为一个很好的例子,说明如何分解一行令人困惑的代码,以了解发生了什么。您没有包含整个查询,因此有些内容必须脱离上下文。首先,添加一些空格以澄清单个嵌套函数,并使其更具可读性:

DECODE(  SIGN( ABS( SUM(amount)  )  ) - :3, -1, 0, SUM(AMOUNT)   ),
然后首先对其进行分析,以了解发生了什么:

DECODE(  SIGN( ABS( **SUM(amount)**  )  ) - :3, -1, 0, SUM(AMOUNT)   ),
首先对名为“amount”的列求和,该列是我们没有看到的查询的一部分

DECODE(  SIGN( **ABS( SUM(amount)  )**  ) - :3, -1, 0, SUM(AMOUNT)   ),
然后获取它的绝对值(删除符号)

然后返回一个指示符号的值。如果<0返回-1,或者如果=0,则返回0,如果>0,则返回1。但由于使用了ABS()函数,它只能是0或1。实际上,它似乎在测试该值是否为0

DECODE(  **SIGN( ABS( SUM(amount)  ) ) - :3**, -1, 0, SUM(AMOUNT)   ),
从中减去在第三个绑定变量中传递的任何值(其他人给出了绑定变量的信息)。这是将在decode语句中测试的表达式

如果值为-1,则返回0,否则返回金额列的总和

有些事情似乎没有意义,比如获取去掉符号的绝对值,然后调用sign()函数。然而,如果没有规格和完整的选择,将显示什么类型的价值:3是很难知道最初的意图是什么。我怀疑这就是你来这里的原因,因为你是一个幸运的人,你有责任弄清楚为什么这不能按预期工作。当你弄明白的时候,在代码中添加一条注释,以澄清你的想法并帮助下一个人


祝你好运

MySql中没有解码功能。这是Oracle PL/SQL吗?如果是,则
:3
是绑定变量的名称。是,它是PL SQL代码。它只调用sql“select”请求并在该绑定变量的请求中使用。但是它绑定了什么???我在此请求或剩余代码中没有其他“:3”?如何找到此代码在此olace中使用的数字(数量)?请编辑此问题以显示整个SQL字符串,以及使用
execute immediate
运行SQL字符串的方式-这将更容易解释bind变量表示的内容及其实际运行时值的来源。感谢您的澄清!我不写代码,我应该测试它们——你的答案——是有用的。非常感谢。我不能复制整个代码,因为它保护了公司的权利。
DECODE(  **SIGN( ABS( SUM(amount)  ) ) - :3**, -1, 0, SUM(AMOUNT)   ),