关于create or replace view

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/15 07:56:50

关于create or replace view
关于create or replace view

关于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展现的是不包含"_"开头的参数.以"_"开头的参数我们通常称为隐含参数,一般不建议修改,但很多因为功能强大经常使用而广为人知.

是不是 创造或重置观点 ?

关于create or replace view The job you offer is to replace someone who left or did you just create it? CREATE OR REPLACE PROCEDURE XXX as RT.CREATE OR REPLACE PROCEDURE XXX as 大致意思我只知道是存储过程的定义,但具体就不清楚了.还有那个XXX一般代表什么?这句话是必须的么? 写存储过程时候 type cur is ref cursor 这句话 CREATE OR REPLACE PACKAGE '' AStype cur is ref cursor create or replace package testpackage as type test_cursor is ref cursor; end testpackage; create or运行时出现如下问题 是怎么回事?java.sql.SQLException: ORA-06550: 第 1 行, 第 20 列: PLS-00103: 出现符号 ;在需要下列之一 不理解oracle 的function是怎么用的,CREATE OR REPLACE TYPE obj_NA_Issued_Exclude_NILNA AS OBJECT(TOTAL_CASES VARCHAR2(500),OBJECTED_CASES VARCHAR2(500),NA_ISSUED_MONTH VARCHAR2(20),PERCENTAGE VARCHAR2(12),MET_TARGET VARCHAR2(10) )/CREATE OR RE 麻烦翻译这几句话,在线等Are you a new or existing Sprint customer?Create a new account for one iPhone.Create a new account for two or more iPhones on an individual or family plan.Replace a phone on my account with a new iPhone.谢了各位 怎么翻译:people create stories create people;or rather stories create people create stories 创建一个简单的函数出错了!create or replace function sum_letterreturn numberASsum number;BEGINselect count(*) into sum from letter;return sum;end;/7/11 PLS-00103: 出现符号 ;在需要下列之一时: ( oracle 语句 缺失表达式错误create or replace view vw_bus_specialtyassessment3 asselectt.year ,t.month ,t.assessdeptid ,t1.objectid ,count(t1.objectid),sum(t1.chargescore),from bus_specialtyassessitem t1,bus_specialtyassessment twhere t1.speci 请解释一下这个颇让oracle触发器create or replace trigger CUX_CREATE_DOC_SEQbefore update of STATUS on GL.GL_JE_HEADERSfor each rowwhen (old.status 'P'and new.CURRENCY_CODE 'STAT' AND NEW.ACTUAL_FLAG = 'A')declareVPREFLEX varchar2(20);VSEQ replace create create create create create create