模式对象依赖

本文探讨了Oracle数据库中对象依赖的概念,解释了当对象A的定义引用了对象B时,A即为依赖对象,B为被引用对象。讨论了数据库如何确保依赖对象对于被引用对象始终保持最新,以及当依赖对象变为无效时的处理机制。文章还提供了创建表和存储过程的示例,并展示了如何查询存储过程的有效状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一些模式对象会引用其他对象,这样就会产生对象依赖。

例如:一个视图包含一个引用表或其他试图的查询,或PL/SQL子程序调用其他子程序。

如果对象A的定义引用了对象B,那么,A就是依赖对象,B则是被引用对象。

还有注意:oracle数据库提供了一种自动机制,以确保依赖对象对于相应的被引用对象来说始终都是最新的。

当被引用对象的更改可能会影响依赖对象时,依赖对象被标记为无效。。。

在一个无效的依赖对象重新变得可用之前,必须基于对被引用对象的新定义重新编译。

当无效依赖对象被引用时,重新编译会自动发生。

create table monkeys(col1 varchar(32),col2 integer);

create or repalce procedure test_proc

as

begin

 for x in(select col1,col2 from monkeys)

 loop

  null;

end loop;

end;

/

下面的是查询显示存储过程的状态是否有效;

select object_name,status from user_objects where objec_name=‘TEST_PROC’;

OBJECT_NAME   STATUS
--------------------------------
TEST_PROC       VALID

注意:

1:

in 里面就是一个结果集,x相当于指针,这个叫做隐式游标。

loop里面一般是插入记录,或者更新,或者输出查询记录,是用户自己添加各种功能,看自己的需要。

2:

for ... loop

end loop;

是一个整体,循环结构,叫做for循环,

3:

select object_name,status from user_objects where objec_name=‘TEST_PROC’;''号里面

的要写成大写,Oracle把所有的模式对象的名称都存储为大写, 这个是Oracle的默认行为,记住就好了。

至于Oracle为什么要这么做,是为了减少数据库用户出错的几率。比如,如果区分大小写,那么我建一个

表叫做Proc_Test,你建一个叫做PROC_TEST,他建一个叫做Proc_test,这样会引起混论的,出错的概率就高了

统一大小写,就没有这个问题了。当然代价是性能上会有一点点损失,数据库里面存储的是全部大写,你写的时

候不是全部大写,代价就是这个转换过程。

4:

CREATE OR REPLACE PROCEDURE "Test_Proc"
AS
BEGIN
FOR x IN ( SELECT col1, col2 FROM test_table )
LOOP
-- process data
NULL;
END LOOP;
END;
/

这时候就要写成下面这样:
select object_name,status from user_objects where object_name='Test_Proc';

双引号里面的内容对大小写是敏感的。

 

转载于:https://www.cnblogs.com/jiangao/archive/2013/05/18/3086356.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值