⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 第 2章.txt

📁 oracle操作基础基础基础基础基础基础基础基础基础基础基础基础
💻 TXT
字号:
例2.1
conn scott/tiger@oradb
DROP TABLE stu;
CREATE TABLE stu (
  sid varchar2(8) Primary Key,   
  name varchar2(20) Not NULL,  
  age number(3),
  addr varchar2(40));

例2.2 conn scott/tiger@oradb
DROP TABLE emp_old;
CREATE TABLE emp_old
   AS SELECT * FROM emp;
DESC emp_old;
SELECT * FROM emp_old;

例2.3
conn scott/tiger@oradb
DROP TABLE stu2;
CREATE TABLE stu2 (
  sid varchar2(8) Primary Key,  
  name varchar2(20) Not NULL,   
  age number(3),
  addr varchar2(40))
  Storage(  initial 100k 
           next 20k      
           Minextents 1   
           Maxextents 99 
           Pctincrease 10) 
  tablespace USERS       
             pctfree 10  
             pctused 40   
             initrans 2      
             maxtrans 10;    

例2.4 
DROP TABLE student CASCADE CONSTRAINTS;
CREATE TABLE student(
  sno    VARCHAR2(10) Primary Key,
  name   VARCHAR2(20) Not NULL UNIQUE,
  sex    VARCHAR2(2)  Check (sex IN('男','女')),
  age    NUMBER(2)    Check (age BETWEEN 16 And 20),
  class  VARCHAR2(7)  Not NULL);
DROP TABLE course CASCADE CONSTRAINTS;
CREATE TABLE course(
   cno    VARCHAR2(4) PRIMARY  KEY,
   cname  VARCHAR2(16) NOT NULL,
   remark varchar2(200) Default '专业课');
DROP TABLE score;
CREATE TABLE score
  ( sno    VARCHAR2(5)  References  STUDENT(SNO)  ON DELETE CASCADE,
    cno    VARCHAR2(4)  References  COURSE(CNO)  ON DELETE CASCADE,
    score  NUMBER(5,2),
    PRIMARY KEY(SNO,CNO) );
INSERT INTO student VALUES('01080','张三','男',19,'01-01');
INSERT INTO course(cno,cname) VALUES('1E23','Oracle数据库');
INSERT INTO score VALUES('01080','1E23',89);
commit;

例2.5
DROP TABLE student CASCADE CONSTRAINTS;
CREATE TABLE student(
  sno    VARCHAR2(10),
  name   VARCHAR2(20) Not NULL,
  sex    VARCHAR2(2),
  age    NUMBER(2),
  class  VARCHAR2(7)  Not NULL,
  CONSTRAINT stu_pk_sno PRIMARY KEY (sno),
  CONSTRAINT stu_unique_name UNIQUE(name),
  CONSTRAINT stu_check_sex CHECK (sex IN('男','女')),
  CONSTRAINT stu_check_age CHECK (age BETWEEN 16 And 20));
DROP TABLE course CASCADE CONSTRAINTS;
CREATE TABLE course(
   cno    VARCHAR2(4),
   cname  VARCHAR2(16) NOT NULL,
   remark varchar2(200) Default '专业课',
   CONSTRAINT course_pk_sno PRIMARY KEY (cno));
DROP TABLE score;
CREATE TABLE score
  ( sno    VARCHAR2(5),
    cno    VARCHAR2(4),
    score  NUMBER(5,2),
    CONSTRAINT score_fk_sno FOREIGN KEY(SNO) References  STUDENT(SNO)  ON DELETE CASCADE,
    CONSTRAINT score_fk_cno FOREIGN KEY(CNO) References COURSE(CNO)  ON DELETE CASCADE,
    CONSTRAINT score_pk_sno_cno PRIMARY KEY(SNO,CNO));
INSERT INTO student VALUES('01080','张三','男',19,'01-01');
INSERT INTO course(cno,cname) VALUES('1E23','Oracle数据库');
INSERT INTO score VALUES('01080','1E23',89);
commit;

例2.6
ALTER TABLE	course MODIFY (cname varchar2(20));  
ALTER TABLE	course MODIFY (cno varchar2(2));   

例2.7
DESC student
SELECT * FROM student;
ALTER TABLE	student ADD (birthday DATE DEFAULT sysdate); 
DESC student
SELECT * FROM student;

例2.8 
SELECT * FROM student;
ALTER TABLE student SET UNUSED (birthday);
DESC STUDENT;
ALTER TABLE student DROP UNUSED COLUMNS;
DESC STUDENT;
--ALTER TABLE student DROP COLUMN birthday;
SELECT * FROM student;
ALTER TABLE student ADD(birthday date DEFAULT sysdate);
SELECT * FROM student;

例2.9
ALTER TABLE emp
 ADD CONSTRAINT check_total_sal
  CHECK (sal + comm <= 5000) ;
INSERT INTO emp(deptno,empno,ename,sal,comm) VALUES(10,1010,'John',2000,400);
INSERT INTO emp(deptno,empno,ename,sal,comm) VALUES(10,1020,'Jordan',4800,500);

例2.10
//启动与禁用主键约束
//下面语句执行是不能成功的,因为:该主键被参照表score引用
ALTER TABLE student MODIFY PRIMARY KEY disable;
//禁用了score表的外键约束
ALTER TABLE score MODIFY CONSTRAINT score_fk_sno disable;
//禁用student表的主键约束
ALTER TABLE student MODIFY PRIMARY KEY disable;
//使score表的外键启用,但是:失败。因为:参照的的列不是主键
ALTER TABLE score  MODIFY CONSTRAINT score_fk_sno enable;
//使student的主键恢复
ALTER TABLE student MODIFY PRIMARY KEY enable;
ALTER TABLE score MODIFY CONSTRAINT score_fk_sno enable;

例2.11
//重命名约束
ALTER TABLE score RENAME CONSTRAINT score_fk_ sno TO score_fk_ stu_sno;
COL OWNER FORMAT A10
COL TABLE_NAME FORMAT A10
COL CONSTRAINT_NAME FORMAT A20
SELECT OWNER,TABLE_NAME,CONSTRAINT_TYPE,CONSTRAINT_NAME
 FROM ALL_CONSTRAINTS WHERE owner='SCOTT'
 ORDER BY TABLE_NAME,CONSTRAINT_TYPE;

例2.12
//删除约束
ALTER TABLE emp DROP CONSTRAINT check_total_sal;
INSERT INTO emp(deptno,empno,ename,sal,comm) VALUES(10,1020,'Jordan',4800,500);

例2.13 
//修改student表的存储参数
ALTER TABLE student
    pctfree 10
    pctused 40
    initrans 2
    maxtrans 10;

例2.14
//重命名表和列
DESC student;
ALTER TABLE student RENAME COLUMN age TO sage;
DESC student;
ALTER TABLE student RENAME TO stu_temp;
RENAME stu_temp TO student;
SELECT * FROM tab;

例2.15
//删除表
DROP TABLE student;
DROP TABLE student CASCADE CONSTRAINTS;

例2.16
//创建按索引组织的表
DROP TABLE countries;
CREATE TABLE countries(
      country_id      CHAR(2),
      country_name    VARCHAR2(40),
      currency_name   VARCHAR2(25),
      currency_symbol  VARCHAR2(3),
      region          VARCHAR2(15),
      CONSTRAINT country_id_pk PRIMARY KEY (country_id )) 
    ORGANIZATION INDEX     
    INCLUDING   country_name     
    PCTTHRESHOLD 2          
    STORAGE               
     ( INITIAL  4K 
      NEXT  2K 
      PCTINCREASE 0 
      MINEXTENTS 1 
      MAXEXTENTS 1 ) 
    OVERFLOW   
    STORAGE      
      ( INITIAL  4K 
        NEXT  2K 
        PCTINCREASE 0 
        MINEXTENTS 1 
        MAXEXTENTS 1 );

例2.17
//创建簇 
CREATE CLUSTER emp_dept (deptno NUMBER(3))
  PCTUSED 80
  PCTFREE 5
  SIZE 600
TABLESPACE users
STORAGE (INITIAL 200K
         NEXT 300K
         MINEXTENTS 2
         MAXEXTENTS 20
         PCTINCREASE 33);
//删除簇
DROP TABLE cluster_dept;

//基于簇创建表
CREATE TABLE cluster_dept(
  DEPTNO NUMBER(3),
  DNAME VARCHAR2(14),
  LOC VARCHAR2(13))
  CLUSTER emp_dept(deptno); 
DROP TABLE cluster _emp;
CREATE TABLE cluster_emp(
  EMPNO NUMBER(4) NOT NULL,
  ENAME VARCHAR2(10),
  JOB VARCHAR2(9),
  MGR NUMBER(4),
  HIREDATE DATE,
  SAL NUMBER(7,2),
  COMM NUMBER(7,2),
  DEPTNO NUMBER(3))
  CLUSTER emp_dept(deptno);

例2.18 
INSERT INTO cluster_dept VALUES(100,'aaa','aaaloc');
DROP INDEX emp_dept_index;
CREATE INDEX emp_dept_index ON CLUSTER emp_dept
 STORAGE (INITIAL 50K
          NEXT 50K
          MINEXTENTS 2
          MAXEXTENTS 10
          PCTINCREASE 33)
 TABLESPACE users
    INITRANS 2
    MAXTRANS 5
    PCTFREE 5;
INSERT INTO cluster_dept VALUES(100,'aaa','aaaloc');
commit;

例2.19 
DROP TABLE part_emp;
CREATE TABLE part_emp(
  EMPNO NUMBER(4) NOT NULL,
  ENAME VARCHAR2(10),
  JOB VARCHAR2(9),
  MGR NUMBER(4),
  HIREDATE DATE,
  SAL NUMBER(7,2),
  COMM NUMBER(7,2),
  DEPTNO NUMBER(3))
PARTITION BY RANGE (sal)
  (PARTITION SAL_1000 VALUES LESS THAN (1000) TABLESPACE users,
   PARTITION SAL_2000 VALUES LESS THAN (2000) TABLESPACE users,
   PARTITION SAL_3000 VALUES LESS THAN (3000) TABLESPACE users,
   PARTITION SAL_4000 VALUES LESS THAN (4000) TABLESPACE users,
   PARTITION SAL_max VALUES LESS THAN (MAXVALUE) tablespace users);
INSERT INTO part_emp SELECT * FROM emp;
commit;
SELECT ename,sal FROM part_emp PARTITION (sal_1000);
SELECT ename,sal FROM part_emp PARTITION (sal_2000);
SELECT ename,sal FROM part_emp PARTITION (sal_3000);
SELECT ename,sal FROM part_emp PARTITION (sal_4000);
SELECT ename,sal FROM part_emp PARTITION (sal_max);

例2.20 
conn system/system@oradb as sysdba
CREATE TABLESPACE ts1 DATAFILE '%ORACLE_HOME%\database\ts1.dbf' size 1M reuse;
CREATE TABLESPACE ts2 DATAFILE '%ORACLE_HOME%\database\ts2.dbf' size 1M reuse;
CREATE TABLESPACE ts3 DATAFILE '%ORACLE_HOME%\database\ts3.dbf' size 1M reuse;
CREATE TABLESPACE ts4 DATAFILE '%ORACLE_HOME%\database\ts4.dbf' size 1M reuse;
conn scott/tiger@oradb
CREATE TABLE test_hash_table(
   id NUMBER,
   name VARCHAR2 (60))
 PARTITION BY HASH (id)
 PARTITIONS 4
 STORE IN (ts1, ts2, ts3, ts4);
COLUMN TABLE_NAME FORMAT A20
COLUMN PARTITION_NAME FORMAT A20
SELECT TABLE_NAME, PARTITION_NAME
 FROM USER_TAB_PARTITIONS ORDER BY TABLE_NAME;
INSERT INTO TEST_HASH_TABLE VALUES(1,'AAAA');
INSERT INTO TEST_HASH_TABLE VALUES(2,'BBBB');
INSERT INTO TEST_HASH_TABLE VALUES(3,'CCCC');
INSERT INTO TEST_HASH_TABLE VALUES(4,'DDDD');
INSERT INTO TEST_HASH_TABLE VALUES(5,'EEEE');
COMMIT;
SELECT * FROM test_hash_table PARTITION (sys_p1);
SELECT * FROM test_hash_table PARTITION (sys_p2);
SELECT * FROM test_hash_table PARTITION (sys_p3);
SELECT * FROM test_hash_table PARTITION (sys_p4);

例2.21 
CREATE TABLE dept_hash (
   deptno NUMBER(3),
   deptname VARCHAR(32))
 STORAGE (INITIAL 10K)
 PARTITION BY HASH(deptno)
   ( PARTITION p1 TABLESPACE ts1, 
     PARTITION p2 TABLESPACE ts2,
     PARTITION p3 TABLESPACE ts3, 
     PARTITION p4 TABLESPACE ts4);

例2.22
DROP TABLE dept_list;
CREATE TABLE dept_list (
   deptno NUMBER(3),
   deptname VARCHAR(32),
   loc VARCHAR(32))
PARTITION BY LIST(loc)
   ( PARTITION p1 VALUES('东','东南','华东') TABLESPACE ts1, 
     PARTITION p2 VALUES('南','华南','中南') TABLESPACE ts2, 
     PARTITION p3 VALUES('西','西南','西北') TABLESPACE ts3, 
     PARTITION p4 VALUES('北','华北','东北') TABLESPACE ts4);
INSERT INTO dept_list VALUES(1,'销售1部','华南');
INSERT INTO dept_list VALUES (2,'销售2部','东南');
INSERT INTO dept_list VALUES (3,'销售3部','东北');
commit;
SELECT * FROM dept_list PARTITION (p1);
SELECT * FROM dept_list PARTITION (p2);
SELECT * FROM dept_list PARTITION (p3);
SELECT * FROM dept_list PARTITION (p4);

例2.23
DROP TABLE emp_comp;
CREATE TABLE emp_comp(
  EMPNO NUMBER(4) NOT NULL,
  ENAME VARCHAR2(10),
  JOB VARCHAR2(9),
  MGR NUMBER(4),
  HIREDATE DATE,
  SAL NUMBER(7,2),
  COMM NUMBER(7,2),
  DEPTNO NUMBER(3))
PARTITION BY RANGE (sal) 
SUBPARTITION BY HASH(empno) SUBPARTITIONS 3 STORE IN (ts1, ts2,ts3)
  (PARTITION sal_comp1 VALUES LESS THAN (2000),
   PARTITION sal_comp2 VALUES LESS THAN (MAXVALUE));
COLUMN TABLE_NAME FORMAT A20
COLUMN PARTITION_NAME FORMAT A20
COLUMN SUBPARTITION_NAME FORMAT A20
SELECT TABLE_NAME,PARTITION_NAME,SUBPARTITION_NAME 
  FROM USER_TAB_SUBPARTITIONS 
  ORDER BY TABLE_NAME,PARTITION_NAME,SUBPARTITION_NAME;
INSERT INTO emp_comp SELECT * FROM emp;
COMMIT;
SELECT ename,sal FROM emp_comp PARTITION(sal_comp1);
SELECT ename,sal FROM emp_comp SUBPARTITION(SYS_SUBP5);
SELECT ename,sal FROM emp_comp SUBPARTITION(SYS_SUBP6);
SELECT ename,sal FROM emp_comp SUBPARTITION(SYS_SUBP7);
SELECT ename,sal FROM emp_comp PARTITION(sal_comp2);
SELECT ename,sal FROM emp_comp SUBPARTITION(SYS_SUBP8);
SELECT ename,sal FROM emp_comp SUBPARTITION(SYS_SUBP9);
SELECT ename,sal FROM emp_comp SUBPARTITION(SYS_SUBP10);

例2.24 
SET ECHO ON;
CONNECT /@oradb AS SYSDBA
CREATE OR REPLACE DIRECTORY dat_dir AS 'd:\data\emp\data';
CREATE OR REPLACE DIRECTORY log_dir AS 'd:\data\emp\log';
CREATE OR REPLACE DIRECTORY bad_dir AS 'd:\data\emp\bad';
GRANT READ ON DIRECTORY dat_dir TO scott;
GRANT WRITE ON DIRECTORY log_dir TO scott;
GRANT WRITE ON DIRECTORY bad_dir TO scott;
CONNECT scott/tiger@oradb
DROP TABLE empxt;
CREATE TABLE empxt (
empno NUMBER(4),
  ename VARCHAR2(10),
  job VARCHAR2(9),
  mgr NUMBER(4),
  hiredate DATE,
  sal NUMBER(7,2),
  comm NUMBER(7,2),
  deptno NUMBER(2))
ORGANIZATION EXTERNAL     
(
  TYPE ORACLE_LOADER 
  DEFAULT DIRECTORY dat_dir
  ACCESS PARAMETERS
  (
    records delimited by newline
    badfile bad_dir:'empxt%a_%p.bad'
    logfile log_dir:'empxt%a_%p.log'
    fields terminated by ','
    missing field VALUES are NULL
    ( empno, ename, job, mgr,
      hiredate char date_format date mask "yyyy-mm-dd",
      sal, comm, deptno
    )
  )
  LOCATION ('emp1.dat', 'emp2.dat')    
)
PARALLEL    
REJECT LIMIT UNLIMITED;

ALTER SESSION ENABLE PARALLEL DML;  
SELECT * FROM empxt;
DELETE FROM emp_comp;
COMMIT;
INSERT INTO emp_comp  SELECT * FROM empxt;
COMMIT;

--emp1.dat
7369,SMITH,CLERK,7902,1980-12-17,800,0,20
7499,ALLEN,SALESMAN,7698,1981-02-20,1600,300,30
7521,WARD,SALESMAN,7698,1981-02-22,1250,500,30
7566,JONES,MANAGER,7839,1981-04-02,2975,0,20
7654,MARTIN,SALESMAN,7698,1981-09-28,1250,1400,30
7698,BLAKE,MANAGER,7839,1981-05-01,2850,0,30
7782,CLARK,MANAGER,7839,1981-06-09,2450,0,10
--emp2.dat
7788,SCOTT,ANALYST,7566,1987-04-19,3000,0,20
7839,KING,PRESIDENT,,1981-11-17,5000,0,10
7844,TURNER,SALESMAN,7698,1981-09-08,1500,0,30
7876,ADAMS,CLERK,7788,1987-05-23,1100,0,20
7900,JAMES,CLERK,7698,1981-12-03,950,0,30
7902,FORD,ANALYST,7566,1981-12-03,3000,0,20
7934,MILLER,CLERK,7782,1982-01-23,1300,0,10




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -