oracle数据库中的表与视图
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
oracle数据库中的表与视图
Oracle数据库数据对象中最基本的是表和视图,其他还有约束、序列、函数、存储过程、包、触发器等。
对数据库的操作可以基本归结为对数据对象的操作,理解和掌握Oracle数据库对象是学习Oracle的捷径。
表和视图
Oracle中表是数据存储的基本结构。
ORACLE8引入了分区表和对象表,ORACLE8i 引入了临时表,使表的功能更强大。
视图是一个或多个表中数据的逻辑表达式。
本文我们将讨论怎样创建和管理简单的表和视图。
管理表
表可以看作有行和列的电子数据表,表是关系数据库中一种拥有数据的结构。
用CREATE TABLE语句建立表,在建立表的同时,必须定义表名,列,以及列的数据类型和大小。
例如:
CREATE TABLE products
( PROD_ID NUMBER(4),
PROD_NAME VAECHAR2(20),
STOCK_QTY NUMBER(5,3)
);
这样我们就建立了一个名为products的表,关键词CREATE TABLE后紧跟的表名,然后定义了三列,同时规定了列的数据类型和大小。
在创建表的同时你可以规定表的完整性约束,也可以规定列的完整性约束,在列上普通的约束是NOT NULL,关于约束的讨论我们在以后进行。
在建立或更改表时,可以给表一个缺省值。
缺省值是在增加行时,增加的数据行中某一项值为null时,oracle即认为该值为缺省值。
下列数据字典视图提供表和表的列的信息:
. DBA_TABLES
. DBA_ALL_TABLES
. USER_TABLES
. USER_ALL_TABLES
. ALL_TABLES
. ALL_ALL_TABLES
. DBA_TAB_COLUMNS
. USER_TAB_COLUMNS
. ALL_TAB_COLUMNS
表的命名规则
表名标识一个表,所以应尽可能在表名中描述表,oracle中表名或列名最长可以达30个字符串。
表名应该以字母开始,可以在表名中包含数字、下划线、#、$等。
从其它表中建立表
可以使用查询从基于一个或多个表中建立表,表的列的数据类型和大小有查询结果决定。
建立这种形式的表的查询可以选择其他表中所有的列或者只选择部分列。
在CREATE TABLE语句中使用关键字AS,例如:
SQL>CREATE TABLE emp AS SELECT * FROM employee
TABLE CREATED
SQL> CREATE TABLE Y AS SELECT * FROM X WHERE no=2
需要注意的是如果查询涉及LONG数据类型,那么CREATE TABLE....AS SELECT....将不会工作。
更改表定义
在建立表后,有时候我们可能需要修改表,比如更改列的定义,更改缺省值,增加新列,删除列等等。
ORACLE使用ALTER TABLE语句来更改表的定义
1、增加列
语法:
ALTER TABLE [schema.] table_name ADD column_definition
用户在CREATE VIEW中可以使用了WITH子串。
WITH READ ONLY子串表示创建的视图是一个只读视图,不能进行更新、插入、删除操作。
WITH CHECK OPTION表示可以进行插入和更新操作,但应该满足WHERE子串的条件。
这个条件就是创建视图WHERE 子句的条件,比如在上面的例子中用户创建了一个视图TOP_EMP,在这个视图中用户不能插入salary小于2000的数据行。
删除视图
删除视图使用DROP VIEW命令。
同时将视图定义从数据字典中删除,基于视图的权限也同时被删除,其他涉及到该视图的函数、视图、程序等都将被视为非法。
例:
DROP VIEW TOP_EMP;
把.dbf的数据导入到Oracle数据库中(VFP -> ACCESS -> Oracle )
在access中导入.dbf数据:
access新建数据库(空数据库)->点击右键导入(文件类型选择ODBC数据库())-> 机器数据源中新建->系统数据库->选择Microsoft FoxPro VFP Driver(*.dbf)
输入内容:
Data Source Name:myforpro
Path:找出所要转换的FORPRO的数据源(如:xtrc.dbc)
其它的默认。
选择刚建立的机器数据源mydbf,点击确定,则会出现在xtrc.dbc数据源中的所有的表,选择所要转化的表即可导入了。
在access中导出.dbf数据到已经建好的Oracle类型:
通过ODBC 来完成: (Oracle 的ODBC 连接)
控制面板-> 管理工具-> 数据源(ODBC).
"系统DSN" -> "添加(D)..." 一个数据源-> 选
择"Oracle ODBC Driver" ->
输入主要内容:
Data Source Name: OraODBC (数据源的名字)
Service Name: OraDB ( Oracle 的数据库名)
其它的就用默认的可以了.
Access 新建表-> 导入表(选择DBF 文件) -> 导进之后,右击表文件选"导出..."
-> 类型选"ODBC Databases(即:oraODBC)" -> 选上面建好的ODBC 就可以了.
orcle 中表中数据操作
--此例在PL/SQL developer内的sql窗口中使用
--注:操作的表原名为:职务字典,原有数据列为:职务编码和职务名称且有数据
--建立一个新表
create table yfycode_level (
id varchar2(3),
name varchar2(16)
)
--在表中插入数据
insert into yfycode_level(id,name)
values('01','国家级')
--查询CODE_POSITION表中的所有数据并显示
Select * From CODE_POSITION
--将表CODE_POSITION表中的数据及表结构一起拷贝到表YFYCODE_POS,相当于复制表CODE_POSITION
Create Table YFYCODE_POS As Select * From CODE_POSITION
--查询表YFYCODE_POS表中的所有数据并显示,会发现与CODE_POSITION完全相同
Select * From YFYCODE_POS
--把表名为职务字典的表,改名为CODE_POSITION
ALTER TABLE 职务字典RENAME TO CODE_POSITION
--在表CODE_POSTION表中加入两列分别为ID,NAME
alter table CODE_POSITION add ID Varchar2(3)
alter table CODE_POSITION add NAME VARCHAR2(16)
--将表中原来有的两列职务编码,职务名称内的数据复制到列ID,NAME中,且把职务编码,职务名称列清空
update CODE_POSITION set ID = 职务编码, 职务编码= Null,NAME = 职务名称, 职务
名称= NULL;
--将CODE_POSITION表中的列职务编码,职务名称删除
alter table CODE_POSITION set unused column 职务编码;
alter table CODE_POSITION set unused column 职务名称;
--所采用的表是yfycode_pos,其中有两列数据分别为ID,NAME,并且有数据
Select * From yfycode_pos
--创建序列yfycode_pos_Id_sequence
Drop Sequence yfycode_pos_Id_sequence;
Create Sequence yfycode_pos_Id_sequence
INCREMENT BY 1
START WITH 1
maxvalue 99999
NOCYCLE;
----创建触发器UserInfo_Id_trigger
CREATE OR REPLACE TRIGGER yfycode_pos_Id_trigger
BEFORE INSERT
ON yfycode_pos
FOR EACH ROW
DECLARE
newId Varchar(2);
BEGIN
SELECT yfycode_pos_Id_sequence.nextval INTO newId FROM dual;
:new.id := newId;
END;
首先执行创建序列和创建触发器后,则会在每次对表进行插入操作时,会自动生成ID号,如执行
Insert Into yfycode_pos(Name) Values('民磊磊')后,会自动增加一行(1, 民磊磊)。
再执行一次,则会再增加一行(2,民磊磊)。
--删除一个oracle中的表
drop table yfycode_level。