我对PL / SQL上下文有些怀疑,是吗:
感谢。
答案 0 :(得分:5)
引用包的每个数据库会话都有一个独立的包实例。所有包状态(即全局包变量)都与每个会话不同。
在调用相同包过程或函数的多个会话之间没有同步 - 除了它们执行的数据库操作的自然副作用以及实现它们所需的锁定之外可能发生的事情。
答案 1 :(得分:3)
您的问题有点难以理解。我会尽力回答。
PL / SQL是一种过程语言。所以我不会谈论实例。代码只存在一次,包变量每个会话存在一次,并且每次调用过程或函数时局部变量都存在一次。您无法访问其他会话的变量或内存。
对PL / SQL代码的所有调用都是同步的。没有像多线程或共享内存(在PL / SQL中)的概念。但请注意,Oracle是一个多用户系统。因此,其他会话可能同时更改数据库中的数据。许多这些变化暂时因交易异常而隐藏起来。但它不会影响记忆中的任何变量。
除非尝试将同一数据库行更改为另一个会话,否则程序永远不会阻止。但这与任何PL / SQL代码无关,也可以通过从不同工具运行的SQL命令来体验。