database - 如果重新编译规范,是否必须重新编译主体
问题描述
我在包装规格中有一个变量。我只是每次都修改那个变量。
body
每次进行这些更改时都需要重新编译吗?
其实我很困惑,当你需要重新编译时package body
,因为我不是在每种情况下都编译它。
解决方案
oracle 中的包在会话中是有状态的,因此如果您从 DB 更改包规范或主体并且该包在应用程序的某个会话中使用,您将收到包状态已被丢弃错误。但如果当前没有通过任何会话访问包,这不是问题。
但是,如果你说的是包和包体的变化需要重新编译?-->那么答案是否定的。
看这里的小演示:
创建包规范或主体:
SQL> create or replace package p
2 as
3 num number := 123;
4 function f(p_in number) return number;
5 end p;
6 /
Package created.
SQL>
SQL> create or replace package body p
2 as
3 function f(p_in number) return number is
4 begin
5 return num;
6 end f;
7 end p;
8 /
Package body created.
SQL>
调用包的函数:
SQL> select p.f(2) from dual;
P.F(2)
----------
123
SQL>
更改包装规格:
SQL> create or replace package p
2 as
3 num number := 456;
4 function f(p_in number) return number;
5 end p;
6 /
Package created.
SQL>
在不改变body的情况下调用包的函数:
SQL> select p.f(2) from dual;
P.F(2)
----------
456
SQL>
哇!!!有用。
推荐阅读
- javascript - 具有动态添加控件的 Angular FormArray
- sql - 如何在 SQL Developer 中删除脚本中的小数点
- javascript - 如何访问嵌入在 json 对象中的数组。调用时对象的属性未定义
- java - Android Flex Layout 设置 flexBasisPercent?
- php - 我正在尝试安装 laravel 6 pdf 包“composer 需要 barryvdh/laravel-dompdf”
- html - 如何使用 justify-content: center 在导航栏上移动图像
- javascript - 控制台日志未在异步函数中打印等待的承诺
- twitter-bootstrap - bootstrap.min.js 和 bootstrap.bundle.min.js 有什么不同?
- git - git rebase:以下未跟踪的工作树文件将被结帐覆盖(尽管文件被跟踪)
- android - 如何在android的API 29中将图像保存在图库中?