关于create or replace view
来源:学生作业帮 编辑:大师作文网作业帮 分类:综合作业 时间:2024/09/20 14:46:32
关于create or replace view
我在网上看过这样的说明,你也看一下吧,不知道对你有没有用!
首先,Oracle的字典表和视图基本上可以分为三个层次.
1.X$表
这一部分表是Oracle数据库的运行基础,在数据库启动时由Oracle应用程序动态创建.
这部分表对数据库来说至关重要,所以Oracle不允许SYSDBA之外的用户直接访问,显示授权不被允许.
如果显示授权你会收到如下错误:
SQL> grant select on x$ksppi to eygle;
grant select on x$ksppi to eygle
*
ERROR at line 1:
ORA-02030: can only select from fixed tables/views
2.GV$和V$视图
从Oracle8开始,GV$视图开始被引入,其含义为Global V$.
除了一些特例以外,每个V$视图都有一个对应的GV$视图存在.
GV$视图的产生是为了满足OPS环境的需要,在OPS环境中,查询GV$视图返回所有实例信息,而每个V$视图基于GV$视图,增加了INST_ID列判断后建立,只包含当前连接实例信息.
注意,每个V$视图都包含类似语句:
where inst_id = USERENV(’Instance’)
用于限制返回当前实例信息.
我们从GV$FIXED_TABLE和V$FIXED_TABLE开始
SQL> select view_definition from v_$fixed_view_definition
where view_name=’V$FIXED_TABLE’;
VIEW_DEFINITION
----------------------------------------------------------
select NAME , OBJECT_ID , TYPE , TABLE_NUM from GV$FIXED_TABLE
where inst_id = USERENV(’Instance’)
这里我们看到V$FIXED_TABLE基于GV$FIXED_TABLE创建.
SQL> select view_definition from v_$fixed_view_definition
where view_name=’GV$FIXED_TABLE’;
VIEW_DEFINITION
-----------------------------------------------------------
select inst_id,kqftanam, kqftaobj, ’TABLE’, indx from x$kqfta
union all
select inst_id,kqfvinam, kqfviobj, ’VIEW’, 65537 from x$kqfvi
union all
select inst_id,kqfdtnam, kqfdtobj, ’TABLE’, 65537 from x$kqfdt
这样我们找到了GV$FIXED_TABLE视图的创建语句,该视图基于X$表创建.
3.GV_$,V_$视图和V$,GV$同义词
这些视图是通过catalog.ql创建.
当catalog.sql运行时:
create or replace view v_$fixed_table as select * from v$fixed_table;
create or replace public synonym v$fixed_table for v_$fixed_table;
create or replace view gv_$fixed_table as select * from gv$fixed_table;
create or replace public synonym gv$fixed_table for gv_$fixed_table;
我们注意到,第一个视图V_$和GV_$首先被创建,v_$和gv_$两个视图.
然后基于V_$视图的同义词被创建.
所以,实际上通常我们访问的V$视图,其实是指向V_$视图的同义词.
而V_$视图是基于真正的V$视图(这个视图是基于X$表建立的).
而v$fixed_view_definition视图是我们研究Oracle对象关系的一个入口,仔细理解Oracle的数据字典机制,有助于深入了解和学习Oracle数据库知识.
4.再进一步
1).X$表
关于X$表,其创建信息我们也可以从数据字典中一窥究竟.
首先我们考察bootstrap$表,该表中记录了数据库启动的基本及驱动信息.
SQL> select * from bootstrap$;
LINE# OBJ# SQL_TEXT
------------------------------------------------------------------
-1 -1 8.0.0.0.0
0 0 CREATE ROLLBACK SEGMENT SYSTEM STORAGE ( INITIAL 112K NEXT 1024K
MINEXTENTS 1 M
8 8 CREATE CLUSTER C_FILE#_BLOCK#("TS#" NUMBER,"SEGFILE#" NUMBER,
"SEGBLOCK#" NUMBER)
9 9 CREATE INDEX I_FILE#_BLOCK# ON CLUSTER C_FILE#_BLOCK# PCTFREE 10
INITRANS 2 MAXT
14 14 CREATE TABLE SEG$("FILE#" NUMBER NOT NULL,"BLOCK#" NUMBER NOT
NULL,"TYPE#" NUMBE
5 5 CREATE TABLE CLU$("OBJ#" NUMBER NOT NULL,"DATAOBJ#" NUMBER,"TS#"
NUMBER NOT NULL
6 6 CREATE CLUSTER C_TS#("TS#" NUMBER) PCTFREE 10 PCTUSED 40 INITRANS
2 MAXTRANS 255
7 7 CREATE INDEX I_TS# ON CLUSTER C_TS# PCTFREE 10 INITRANS 2 MAXTRANS
255 STORAGE (
.
这部分信息,在数据库启动时最先被加载,跟踪数据库的启动过程,我们发现数据库启动的第一个动作就是:
create table bootstrap$ ( line# number not null, obj# number not null,
sql_text varchar2(4000) not null) storage (initial 50K objno 56 extents
(file 1 block 377))
这部分代码是写在Oracle应用程序中的,在内存中创建了bootstrap$以后,Oracle就可以从file 1,block 377上读取其他信息,创建重要的数据库对象.从而根据这一部分信息启动数据库,这就实现了数据库的引导,类似于操作系统的初始化. 这部分你可以参考biti_rainy的文章.
X$表由此建立.这一部分表可以从v$fixed_table中查到:
SQL> select count(*) from v$fixed_table where name like ’X$%’;
COUNT(*)
----------
394
共有394个X$对象被记录.
2).GV$和V$视图
X$表建立以后,基于X$表的GV$和V$视图得以创建.
这部分视图我们也可以通过查询V$FIXED_TABLE得到.
SQL> select count(*) from v$fixed_table where name like ’GV$%’;
COUNT(*)
----------
259
这一部分共259个对象.
SQL> select count(*) from v$fixed_table where name like ’V$%’;
COUNT(*)
----------
259
同样是259个对象.
v$fixed_table共记录了394 + 259 + 259 共 912 个对象.
我们通过V$PARAMETER视图来追踪一下数据库的架构:
SQL> select view_definition from v$fixed_view_definition a where
a.VIEW_NAME=’V$PARAMETER’;
VIEW_DEFINITION
-------------------------------------------------------------------
select NUM , NAME , TYPE , VALUE , ISDEFAULT , ISSES_MODIFIABLE ,
ISSYS_MODIFIA
BLE , ISMODIFIED , ISADJUSTED , DESCRIPTION, UPDATE_COMMENT from
GV$PARAMETER wh
ere inst_id = USERENV(’Instance’)
我们看到V$PARAMETER是由GV$PARAMETER创建的.
SQL> select view_definition from v$fixed_view_definition a where
a.VIEW_NAME=’GV$PARAMETER’;
VIEW_DEFINITION
-------------------------------------------------------------------
select x.inst_id,x.indx+1,ksppinm,ksppity,ksppstvl,ksppstdf, decode
(bitand(kspp
iflg/256,1),1,’TRUE’,’FALSE’), decode(bitand(ksppiflg/65536,3),1,
’IMMEDIATE’,2,
’DEFERRED’, 3,’IMMEDIATE’,’FALSE’), decode(bit and(ksppstvf,7),
1,’MODIFIED’,4,’SYSTEM_MOD’,’FALSE’), decode(bitand(ksppstvf,2
,2,’TRUE’,’FALSE’), ksppdesc, ksppstcmnt from x$ksppi x, x$ksppcv
y where (x.indx = y.indx) and ((translate(ksppinm,’_’,’#’) not
like ’#%’) or (ksppstdf = ’FALSE’))
在这里我们看到GV$PARAMETER来源于x$ksppi,x$ksppcv两个X$表. x$ksppi,x$ksppcv 基本上包含所有数据库可调整参数,v$parameter展现的是不包含"_"开头的参数.以"_"开头的参数我们通常称为隐含参数,一般不建议修改,但很多因为功能强大经常使用而广为人知.
首先,Oracle的字典表和视图基本上可以分为三个层次.
1.X$表
这一部分表是Oracle数据库的运行基础,在数据库启动时由Oracle应用程序动态创建.
这部分表对数据库来说至关重要,所以Oracle不允许SYSDBA之外的用户直接访问,显示授权不被允许.
如果显示授权你会收到如下错误:
SQL> grant select on x$ksppi to eygle;
grant select on x$ksppi to eygle
*
ERROR at line 1:
ORA-02030: can only select from fixed tables/views
2.GV$和V$视图
从Oracle8开始,GV$视图开始被引入,其含义为Global V$.
除了一些特例以外,每个V$视图都有一个对应的GV$视图存在.
GV$视图的产生是为了满足OPS环境的需要,在OPS环境中,查询GV$视图返回所有实例信息,而每个V$视图基于GV$视图,增加了INST_ID列判断后建立,只包含当前连接实例信息.
注意,每个V$视图都包含类似语句:
where inst_id = USERENV(’Instance’)
用于限制返回当前实例信息.
我们从GV$FIXED_TABLE和V$FIXED_TABLE开始
SQL> select view_definition from v_$fixed_view_definition
where view_name=’V$FIXED_TABLE’;
VIEW_DEFINITION
----------------------------------------------------------
select NAME , OBJECT_ID , TYPE , TABLE_NUM from GV$FIXED_TABLE
where inst_id = USERENV(’Instance’)
这里我们看到V$FIXED_TABLE基于GV$FIXED_TABLE创建.
SQL> select view_definition from v_$fixed_view_definition
where view_name=’GV$FIXED_TABLE’;
VIEW_DEFINITION
-----------------------------------------------------------
select inst_id,kqftanam, kqftaobj, ’TABLE’, indx from x$kqfta
union all
select inst_id,kqfvinam, kqfviobj, ’VIEW’, 65537 from x$kqfvi
union all
select inst_id,kqfdtnam, kqfdtobj, ’TABLE’, 65537 from x$kqfdt
这样我们找到了GV$FIXED_TABLE视图的创建语句,该视图基于X$表创建.
3.GV_$,V_$视图和V$,GV$同义词
这些视图是通过catalog.ql创建.
当catalog.sql运行时:
create or replace view v_$fixed_table as select * from v$fixed_table;
create or replace public synonym v$fixed_table for v_$fixed_table;
create or replace view gv_$fixed_table as select * from gv$fixed_table;
create or replace public synonym gv$fixed_table for gv_$fixed_table;
我们注意到,第一个视图V_$和GV_$首先被创建,v_$和gv_$两个视图.
然后基于V_$视图的同义词被创建.
所以,实际上通常我们访问的V$视图,其实是指向V_$视图的同义词.
而V_$视图是基于真正的V$视图(这个视图是基于X$表建立的).
而v$fixed_view_definition视图是我们研究Oracle对象关系的一个入口,仔细理解Oracle的数据字典机制,有助于深入了解和学习Oracle数据库知识.
4.再进一步
1).X$表
关于X$表,其创建信息我们也可以从数据字典中一窥究竟.
首先我们考察bootstrap$表,该表中记录了数据库启动的基本及驱动信息.
SQL> select * from bootstrap$;
LINE# OBJ# SQL_TEXT
------------------------------------------------------------------
-1 -1 8.0.0.0.0
0 0 CREATE ROLLBACK SEGMENT SYSTEM STORAGE ( INITIAL 112K NEXT 1024K
MINEXTENTS 1 M
8 8 CREATE CLUSTER C_FILE#_BLOCK#("TS#" NUMBER,"SEGFILE#" NUMBER,
"SEGBLOCK#" NUMBER)
9 9 CREATE INDEX I_FILE#_BLOCK# ON CLUSTER C_FILE#_BLOCK# PCTFREE 10
INITRANS 2 MAXT
14 14 CREATE TABLE SEG$("FILE#" NUMBER NOT NULL,"BLOCK#" NUMBER NOT
NULL,"TYPE#" NUMBE
5 5 CREATE TABLE CLU$("OBJ#" NUMBER NOT NULL,"DATAOBJ#" NUMBER,"TS#"
NUMBER NOT NULL
6 6 CREATE CLUSTER C_TS#("TS#" NUMBER) PCTFREE 10 PCTUSED 40 INITRANS
2 MAXTRANS 255
7 7 CREATE INDEX I_TS# ON CLUSTER C_TS# PCTFREE 10 INITRANS 2 MAXTRANS
255 STORAGE (
.
这部分信息,在数据库启动时最先被加载,跟踪数据库的启动过程,我们发现数据库启动的第一个动作就是:
create table bootstrap$ ( line# number not null, obj# number not null,
sql_text varchar2(4000) not null) storage (initial 50K objno 56 extents
(file 1 block 377))
这部分代码是写在Oracle应用程序中的,在内存中创建了bootstrap$以后,Oracle就可以从file 1,block 377上读取其他信息,创建重要的数据库对象.从而根据这一部分信息启动数据库,这就实现了数据库的引导,类似于操作系统的初始化. 这部分你可以参考biti_rainy的文章.
X$表由此建立.这一部分表可以从v$fixed_table中查到:
SQL> select count(*) from v$fixed_table where name like ’X$%’;
COUNT(*)
----------
394
共有394个X$对象被记录.
2).GV$和V$视图
X$表建立以后,基于X$表的GV$和V$视图得以创建.
这部分视图我们也可以通过查询V$FIXED_TABLE得到.
SQL> select count(*) from v$fixed_table where name like ’GV$%’;
COUNT(*)
----------
259
这一部分共259个对象.
SQL> select count(*) from v$fixed_table where name like ’V$%’;
COUNT(*)
----------
259
同样是259个对象.
v$fixed_table共记录了394 + 259 + 259 共 912 个对象.
我们通过V$PARAMETER视图来追踪一下数据库的架构:
SQL> select view_definition from v$fixed_view_definition a where
a.VIEW_NAME=’V$PARAMETER’;
VIEW_DEFINITION
-------------------------------------------------------------------
select NUM , NAME , TYPE , VALUE , ISDEFAULT , ISSES_MODIFIABLE ,
ISSYS_MODIFIA
BLE , ISMODIFIED , ISADJUSTED , DESCRIPTION, UPDATE_COMMENT from
GV$PARAMETER wh
ere inst_id = USERENV(’Instance’)
我们看到V$PARAMETER是由GV$PARAMETER创建的.
SQL> select view_definition from v$fixed_view_definition a where
a.VIEW_NAME=’GV$PARAMETER’;
VIEW_DEFINITION
-------------------------------------------------------------------
select x.inst_id,x.indx+1,ksppinm,ksppity,ksppstvl,ksppstdf, decode
(bitand(kspp
iflg/256,1),1,’TRUE’,’FALSE’), decode(bitand(ksppiflg/65536,3),1,
’IMMEDIATE’,2,
’DEFERRED’, 3,’IMMEDIATE’,’FALSE’), decode(bit and(ksppstvf,7),
1,’MODIFIED’,4,’SYSTEM_MOD’,’FALSE’), decode(bitand(ksppstvf,2
,2,’TRUE’,’FALSE’), ksppdesc, ksppstcmnt from x$ksppi x, x$ksppcv
y where (x.indx = y.indx) and ((translate(ksppinm,’_’,’#’) not
like ’#%’) or (ksppstdf = ’FALSE’))
在这里我们看到GV$PARAMETER来源于x$ksppi,x$ksppcv两个X$表. x$ksppi,x$ksppcv 基本上包含所有数据库可调整参数,v$parameter展现的是不包含"_"开头的参数.以"_"开头的参数我们通常称为隐含参数,一般不建议修改,但很多因为功能强大经常使用而广为人知.
CREATE OR REPLACE PROCEDURE XXX as
create or replace package testpackage as type test_cursor is
Replace(" ",
replace
give another word or phrase to replace the following words
Give another word or phraseto replace the words
are used to create harmony above or below the melody
debits to asset accounts must create credits to liability or
英语翻译A silo or siloed view refers to a view of only one aspec
is that a view or is that a view什么意思
Write the word or phrase in the blanks to replace the underl
The job you offer is to replace someone who left or did you