小编inv*_*nit的帖子

在错误抛出的上下文中oracle调用和执行之间的区别

我有一些用Oracle编写的程序.不幸的是我无法显示其代码.其中的某个地方是由于缺少必需的数据而选择执行崩溃的地方.看起来像这样

select value into l_value
        from config
       where code = upper(p_code);
Run Code Online (Sandbox Code Playgroud)

所以当我这样调用这个过程时(在SqlDeveloper中)

execute some_package.some_procedure('CODE');
Run Code Online (Sandbox Code Playgroud)

它抛出

Error report -
ORA-01403: no data found
ORA-06512: at "XXXXXXXXXXXXXXXXXXX", line 111
ORA-06512: at "XXXXXXXXXXXXXXXXXXX", line 111
ORA-06512: at line 1
01403. 00000 -  "no data found"
*Cause:    No data was found from the objects.
*Action:   There was no data from the objects which may be due to end of fetch.
Run Code Online (Sandbox Code Playgroud)

但是当我这样称呼它时

call some_package.some_procedure('CODE');
Run Code Online (Sandbox Code Playgroud)

它崩溃在同一个地方(我可以从结果中建议,存储在DB中),但它没有抛出异常.

some_package.some_procedure('CODE') succeeded.
Run Code Online (Sandbox Code Playgroud)

怎么了?为什么会有这样的差异?

sql database oracle plsql

6
推荐指数
1
解决办法
261
查看次数

为什么通过括号中的变量访问groovy map始终返回null?

简要

我需要通过密钥的动态名称对映射/属性进行空安全访问.Map本身可以为null.我想出了map?.(keyName)但是想知道为什么它不能像预期的那样起作用并且总是回归null

代码示例

def map = [key: 'value']
def keyName = 'key'

map.each({ key, value -> println("[${key.class}]: [${value.class}]")})
println("keyName class is [${keyName.class}]")

println(map?.(keyName))                        // null  <--------- My question

// Alternatives that work well
println(map?.(keyName as String))              // value
println(map?.(keyName as java.lang.String))    // value
println(map?.get(keyName))                     // value

?
Run Code Online (Sandbox Code Playgroud)

产量

[class java.lang.String]: [class java.lang.String]
keyName class is [class java.lang.String]
null
value
value
value
Run Code Online (Sandbox Code Playgroud)

如果两者keyName和地图键都是类型,java.lang.String为什么map?.(keyName)不返回值?为何map?.(keyName as String)回归?

链接

检查Groovy Web控制台

groovy dictionary

2
推荐指数
1
解决办法
1313
查看次数

标签 统计

database ×1

dictionary ×1

groovy ×1

oracle ×1

plsql ×1

sql ×1