`
abo168
  • 浏览: 8509 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

Oracle创建用户、创建表、分页、存储过程

阅读更多
--创建用户
create user OracleTest identified by password
--给用户授权
grant connect,resource to OracleTest
conn OracleTest/password;
-- 创建新表 DEPARTMENT。
-- DEPARTMENT : Department 的表
--  D_ID : D_ID 标识 Department
--  D_NAME : D_Name 属于 Department 
create table DEPARTMENT (
D_ID VARCHAR2(10) not null,
D_NAME VARCHAR2(10) not null, constraint DEPARTMENT_PK primary key (D_ID) );

-- 创建新表 REGISTER。
-- REGISTER : Register 的表
--  R_ID : R_ID 标识 Register
--  C_ID : C_ID 属于 Register
--  S_ID : S_ID 属于 Register
--  T_ID : T_ID 属于 Register
--  R_DATE : R_Date 属于 Register
--  R_SCORE : R_Score 属于 Register 
create table REGISTER (
R_ID VARCHAR2(10) not null,
C_ID VARCHAR2(10) not null,
S_ID VARCHAR2(10) not null,
T_ID VARCHAR2(10) not null,
R_DATE DATE not null,
R_SCORE NUMBER(38,0) null, constraint REGISTER_PK primary key (R_ID) );

-- 创建新表 COURSE。
-- COURSE : Course 的表
--  C_ID : C_ID 标识 Course
--  C_NAME : C_Name 属于 Course
--  C_COMMENT : C_Comment 属于 Course 
create table COURSE (
C_ID VARCHAR2(10) not null,
C_NAME VARCHAR2(10) not null,
C_COMMENT VARCHAR2(50) null, constraint COURSE_PK primary key (C_ID) );

-- 创建新表 STUDENT。
-- STUDENT : Student 的表
--  S_ID : S_ID 标识 Student
--  S_NAME : S_Name 属于 Student
--  S_MAIL : S_Mail 属于 Student 
create table STUDENT (
S_ID VARCHAR2(10) not null,
S_NAME VARCHAR2(10) not null,
S_MAIL VARCHAR2(50) null, constraint STUDENT_PK primary key (S_ID) );

-- 创建新表 TEACHER。
-- TEACHER : Teacher 的表
--  T_ID : T_ID 标识 Teacher
--  T_NAME : T_Name 属于 Teacher
--  D_ID : D_ID 属于 Teacher
--  T_MAIL : T_Mail 属于 Teacher 
create table TEACHER (
T_ID VARCHAR2(10) not null,
T_NAME VARCHAR2(10) not null,
D_ID VARCHAR2(10) not null,
T_MAIL VARCHAR2(50) null, constraint TEACHER_PK primary key (T_ID) );

-- 在表 REGISTER 中添加外键约束。
alter table REGISTER
add constraint STUDENT_REGISTER_FK1 foreign key (S_ID)references STUDENT (S_ID);
alter table REGISTER
add constraint COURSE_REGISTER_FK1 foreign key (C_ID)references COURSE (C_ID);
alter table REGISTER
add constraint TEACHER_REGISTER_FK1 foreign key (T_ID)references TEACHER (T_ID);
-- 在表 TEACHER 中添加外键约束。
alter table TEACHER
add constraint DEPARTMENT_TEACHER_FK1 foreign key (D_ID)references DEPARTMENT (D_ID);
--创建序列和触发器
create sequence xulie
create sequence bumen
create sequence stu_xl
create sequence course_xl
create sequence register_xl
--创建触发器
--teacher
create or replace trigger teacher_id
before insert on teacher
for each row
declare
v_num number(3);
begin
select xulie.nextval into v_num from dual;
:new.T_ID:='HYT'||lpad(v_num,3,'0');
end;
-----------
--部门
create or replace trigger Department_id
before insert on Department
for each row
declare
v_num number(2);
begin
select bumen.nextval into v_num from dual;
:new.D_ID:='HYD'||lpad(v_num,2,'0');
end;
------
--学生
create or replace trigger stu_id
before insert on Student
for each row
declare
v_num number(3);
begin
select stu_xl.nextval into v_num from dual;
:new.S_ID:='HYS'||lpad(v_num,3,'0');
end;
--课程
create or replace trigger course_id
before insert on course
for each row
declare
v_num number(3);
begin
select course_xl.nextval into v_num from dual;
:new.C_ID:='HYC'||lpad(v_num,3,'0');
end;
--选课表
create or replace trigger register_id
before insert on register
for each row
declare
v_num number(4);
begin
select register_xl.nextval into v_num from dual;
:new.R_ID:='HYC'||lpad(v_num,4,'0');
end;
--添加测试数据
--部门表
insert into Department(D_name) values('教学一部')
insert into Department(D_name) values('教学二部')
--teacher表
insert into teacher(t_name,d_id,t_mail) values('张泽','HYD01','ZhangZe@hy.com')
insert into teacher(t_name,d_id,t_mail) values('刘跃','HYD01','YueLiu@hy.com')
insert into teacher(t_name,d_id,t_mail) values('张成','HYD01','ZhangCheng@hy.com')
insert into teacher(t_name,d_id,t_mail) values('李立','HYD02','')
insert into teacher(t_name,d_id,t_mail) values('蒋岩峰','HYD02','JiangYF@hy.com')
insert into teacher(t_name,d_id,t_mail) values('吴招炫','HYD02','WuZhxuan@hy.com')
--Student表
insert into student(s_name,s_mail) values('王一','Wyi@hy.com')
insert into student(s_name,s_mail) values('王二','Wer@hy.com')
insert into student(s_name,s_mail) values('王三','')
insert into student(s_name,s_mail) values('王四','Wsi@hy.com')
insert into student(s_name,s_mail) values('张一','Zhyi@hy.com')
insert into student(s_name,s_mail) values('张二','Zher@hy.com')
--couser表
insert into course(c_name,c_comment) values('C程序设计','C程序设计')
insert into course(c_name,c_comment) values('Java程序设计','')
insert into course(c_name,c_comment) values('MS SQL Server 2000','数据库技术')
insert into course(c_name,c_comment) values('HTML入门','网页设计技术')
insert into course(c_name,c_comment) values('.NET大型企业开发','.NET大型企业开发')
insert into course(c_name,c_comment) values('.LAMP','')
--选课表
insert into register(C_ID,S_ID,T_ID,R_Date,R_score) values('HYC001','HYS001','HYT001',to_date('2008-6-12','yyyy-mm-dd'),'76')
insert into register(C_ID,S_ID,T_ID,R_Date,R_score) values('HYC001','HYS002','HYT001',to_date('2008-6-12','yyyy-mm-dd'),'87')  
insert into register(C_ID,S_ID,T_ID,R_Date,R_score) values('HYC001','HYS003','HYT001',to_date('2008-6-12','yyyy-mm-dd'),'90')
insert into register(C_ID,S_ID,T_ID,R_Date,R_score) values('HYC001','HYS004','HYT001',to_date('2008-6-12','yyyy-mm-dd'),'69')
insert into register(C_ID,S_ID,T_ID,R_Date,R_score) values('HYC006','HYS001','HYT003',to_date('2008-6-12','yyyy-mm-dd'),'80')
insert into register(C_ID,S_ID,T_ID,R_Date,R_score) values('HYC006','HYS002','HYT003',to_date('2008-6-12','yyyy-mm-dd'),'84')
insert into register(C_ID,S_ID,T_ID,R_Date,R_score) values('HYC006','HYS003','HYT003',to_date('2008-6-12','yyyy-mm-dd'),'60')
insert into register(C_ID,S_ID,T_ID,R_Date,R_score) values('HYC006','HYS004','HYT003',to_date('2008-6-12','yyyy-mm-dd'),'55')
insert into register(C_ID,S_ID,T_ID,R_Date,R_score) values('HYC003','HYS001','HYT004',to_date('2008-6-12','yyyy-mm-dd'),'')
insert into register(C_ID,S_ID,T_ID,R_Date,R_score) values('HYC003','HYS002','HYT004',to_date('2008-7-22','yyyy-mm-dd'),'89')
insert into register(C_ID,S_ID,T_ID,R_Date,R_score) values('HYC003','HYS003','HYT004',to_date('2008-7-22','yyyy-mm-dd'),'69')
insert into register(C_ID,S_ID,T_ID,R_Date,R_score) values('HYC003','HYS004','HYT004',to_date('2008-7-22','yyyy-mm-dd'),'77')
insert into register(C_ID,S_ID,T_ID,R_Date,R_score) values('HYC004','HYS001','HYT006',to_date('2008-7-22','yyyy-mm-dd'),'73')
insert into register(C_ID,S_ID,T_ID,R_Date,R_score) values('HYC004','HYS002','HYT006',to_date('2008-7-22','yyyy-mm-dd'),'89')
insert into register(C_ID,S_ID,T_ID,R_Date,R_score) values('HYC004','HYS003','HYT006',to_date('2008-7-22','yyyy-mm-dd'),'')
insert into register(C_ID,S_ID,T_ID,R_Date,R_score) values('HYC004','HYS004','HYT006',to_date('2008-7-22','yyyy-mm-dd'),'88')
--5.1 列出所有教师的姓名和部门名
select t.t_name,d.d_name from teacher t join department d on t.d_id=d.d_id
--5.2列出每个学生的姓名和平均成绩
select s.s_name,avg(r.r_score) from student s join register r on s.S_ID=r.S_ID group by s_name
--5.3 列出没有带课的老师的名字
select t_name from teacher where t_id not in (select t_id from register group by t_id)
--5.4 利用SQL查询语句显示学生的各科成绩)
select s.s_name 姓名,
sum(case c.c_name when 'C程序设计' then r.r_score end) C程序设计,
sum(case c.c_name when 'MS SQL Server 2000' then r.r_score end) SQL,
sum(case c.c_name when 'HTML入门' then r.r_score end) HTML,
sum(case c.c_name when 'LAMP' then r.r_score end) LAMP
from Student s join register r on s.S_ID=r.S_ID join course c on r.C_ID=c.C_ID
group by s_name
--5.5 列出教学成绩最好(平均成绩高)的老师的名字
select * from(select t.t_name,avg(r.r_score) av from register r join teacher t on r.t_id=t.t_id group by t.t_name order by av desc) where rownum=1
--5.6列出所有学生姓名,授课教师姓名,课程名称,选课时间,成绩,并包含没有参加选课的学生姓名。
select s.s_name,t.t_name,c.c_name,r.r_date,r.r_score from student s
left join register r on r.s_id= s.s_id
left join teacher t on t.t_id=r.t_id
left join course c on c.c_id=r.c_id
--6创建一个触发器实现级联更新,具体要求是当部门表(department)的部门被删除,则设置此部门教师(teacher)的部门编号为空
create or replace trigger del_dapartment
after delete
on department
for each row
begin
if deleting then
update teacher set d_id='' where d_id=:old.d_id;
end if;
end;
--7创建一存储过程实现对register表的数据进行分页。
create or replace procedure TestPages(
Curr_page int,
Page_Size int,
ResultSet out sys_refcursor)
is
v_start int;
v_end int;
v_count int;
v_pagecount int;
begin
select count(*) into v_count from register;
v_pagecount:=ceil(v_count/Page_Size);
if Curr_page>v_pagecount then
  raise_application_error('-20001','你输入的页数太大');
else
  v_start:=(Curr_page-1)*Page_Size+1;
  v_end:=Curr_page*Page_Size;
   if not ResultSet%isopen then open ResultSet for
   select * from (select rownum id,register.* from register) t where t.id between v_start and v_end ; 
  end if;
end if;
end;
--8,1列出各门课程的课程名称和最高成绩。
select c.c_name,max(r.r_score) from register r right join course c on r.c_id=c.c_id group by c.c_name
--8.2列出所有的参加选课,但没有考试成绩的学生姓名
select s.s_name from register r join student s on r.s_id=s.s_id where r_score is null
分享到:
评论

相关推荐

    Oracle 分页的存储过程

    教你如何在oracle 中创建分页的存储过程

    oracle包用存储过程图分页

    oracle建包,包内有存储过程实现分页,里边包含游标,通过游标实现。

    oracle存储过程实现分页

    通过在oracle数据库端编程实现分页在页面段的显示。首先创建要用的游标包,在创建实现分页的过程

    Oracle存储过程连接并进行分页

    1、利用最佳代码实践PetShop写相应的Oracle连接存储过程的方法(已防注入带参数化) ...3、Oracle数据库如何写存储过程的分页、如何创建程序包并访问 这些可以参考相应的文档、*.SQL文件或作者网站进行访问。

    PL/SQL中编写Oracle数据库分页的存储过程

    此文以oracle数据库中的SCOTT用户的EMP表为例,用PL/SQL Developer编写一个分页存储过程,要求是:可以输入表名,每页显示记录数,当前页,返回总记录数,总页数和返回的结果集。 由于需要返回查询出来的结果集,...

    oracle面试题

    掌握Oracle中rowid,rownum的使用,掌握ORACLE分页语句的写法,掌握ORACLE存储过程的创建和使用,

    oracle使用管理笔记(一些经验的总结)

    14.oracle创建数据库实例 30 15.java操作oracle 31 16.oracle事务处理 34 17.oracle数据完整性 36 18.oracle 序列(sequence) 39 19.oracle 索引 40 20.oracle管理权限和角色 42 21.PL/SQL 47 (1)存储过程简单版本 47...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    说明:Oracle中需要创建用户一定是要具有dba(数据库管理员)权限的用户才能创建,而且创建的新用户不具备任何权限,连登录都不可以。 用法:create user 新用户名 identified by 密码 例子: 2. 修改密码 说明:...

    ORACLE9i_优化设计与系统调整

    §7.3.2 避免新用户使用默认system系统表空间 94 §7.4 Oracle系统所在服务器的独立性 94 第9章 项目分析、设计与管理 94 §9.1 项目分析要点考虑 95 §9.1.1 对应用系统类型的认识 95 §9.1.2 软件项目计划 95 §...

    Oracle数据库、SQL

    1.1表是数据库中存储数据的基本单位 1 1.2数据库标准语言 1 1.3数据库(DB) 1 1.4数据库种类 1 1.5数据库中如何定义表 1 1.6 create database dbname的含义 1 1.7安装DBMS 1 1.8宏观上是数据-->database 1 1.9远程...

    Oracle.doc

    Oracle.doc 创建视图 view 创建序列 创建一个游标 创建存储过程 创建表与字段注释 表中约束关系的创建 表关系及字段的操作--对表结构的操作 to_char 与to_date 截取 替代,替换 索引 -多表关系间的经典应用- •分页....

    基于某某平台的数据源迁移oracle -mysql

    基于某某系统平台的数据源迁移 1 一、背景 4 二、环境准备 4 1、软件 4 2、jar包 4 ...七、某某系统中调用 mysql存储过程 11 1、调用存储过程配置 11 2、存储过程中遇到的问题 13 八、后续迁移方案 17

    Oracle事例

    27、查看放在ORACLE的内存区里的表 SQL>select table_name,cache from user_tables where instr(cache,\'Y\')>0; 28、约束条件 create table employee (empno number(10) primary key, name varchar2(40) ...

    oracle数据库设计规范.doc

    2、概述 本文主要根据oracle9i以上数据库性能特点,描述数据库环境配置、数据库物理 设计、数据库逻辑设计、视图、存储过程、应用程序设计等方面的设计规范。 3、数据库物理设计原则 3.1、数据库环境配置原则 操作...

    db2-技术经验总结

    1.1. 创建一个返回结果集的存储过程\自定义函数 12 1.2. DB2 高级应用 14 1.3. 删除表数据时候出现日志已满的解决方法 24 1.4. DB2快照函数全解析 25 1.5. DB2中的22个命令小技巧 26 1.6. DB2实现类型ORACLE的一些...

    SQL培训第一期

    1.9.3 创建存储过程 create or replace procedure adduser as begin insert into t_user_temp(username,password) select username,password from t_user t where t.username = '小李'; end adduser; 1.9.4 ...

    VC++应用Oracle数据库进行大数据查询

    摘要:VC/C++源码,数据库应用,Oracle,大数据查询 VC++应用Oracle数据库进行大数据查询,包括存储过程、分页查询,使用注意事项:  1,先创建mytable表:  create table mytable(empno, ename, job, mgr, sal, comm...

    mysql数据库索引自学笔记,基础+单表索引+多表索引的创建方法及原理

    单表的索引数不要超过6个:这个是数据库软件的限制,在早期oracle数据库上会有此限制,但mysql等就不会存在这个限制。但读者也要清楚的知道,索引数据过多会影响写的性能; 不应该索引不稳定的列:一般认为更新速度...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part1

    实例260 用户来访时客户端创建COOKIE 341 实例261 删除客户端的COOKIE 343 实例262 使客户端浏览器支持COOKIE 344 5.2 SESSION 345 实例263 掌控登录用户的权限 346 实例264 屏蔽页面刷新对计数器的影响 347 实例265...

Global site tag (gtag.js) - Google Analytics