CREATE TABLE STUDENT( --创建学生表
  ID NUMBER(10) PRIMARY KEY,   --主键ID
  NAME VARCHAR2(20),
  CLASSNAME VARCHAR2(20) --班级ID
);
CREATE SYNONYM STU FOR STUDENT; --给学生表STUDENT创建别名(同义词)
INSERT INTO STUDENT VALUES(1,'Tom',1);
INSERT INTO STUDENT VALUES(2,'Jack',1);
INSERT INTO STUDENT VALUES(3,'Bay',2);
INSERT INTO STUDENT VALUES(4,'John',3);
INSERT INTO STUDENT VALUES(5,'Dld',2);
INSERT INTO STUDENT VALUES(6,'Fmhn',4);
INSERT INTO STUDENT VALUES(7,'Ecls',3);
INSERT INTO STUDENT VALUES(9,'Wsms',3);
INSERT INTO STUDENT VALUES(8,'Qmndk',4);
--以上是添加数据  还没有常见触发器和序列的时候  ID不能自动增长 所以要不能写null  要明确指定---

DELETE STUDENT;   --删除学生表的所有数据
ALTER TABLE STUDENT RENAME COLUMN NAME TO SNAME;  --把学生表中列名为‘NAME’的列的名字  改为‘SNAME’
SELECT * FROM STUDENT;  --查询学生表所以的数据

CREATE TABLE CLASSTAB(  --创建班级表
  CLASSID NUMBER(2) PRIMARY KEY,  --班级ID
  CNAME VARCHAR2(20)
);
INSERT INTO CLASSTAB VALUES(1,'3G');
INSERT INTO CLASSTAB VALUES(2,'SVSE');
INSERT INTO CLASSTAB VALUES(3,'GIS');
INSERT INTO CLASSTAB VALUES(4,'EM');

SELECT * FROM CLASSTAB; --查询班级表的所有数据

--创建视图
CREATE OR REPLACE VIEW V_SC
AS
  SELECT s.SNAME,c.CNAME FROM STUDENT s LEFT JOIN CLASSTAB c ON s.CLASSNAME=c.CLASSID;--左链接
  
--调用视图
SELECT * FROM V_SC;

--创建函数  返回3G班的总人数
CREATE OR REPLACE FUNCTION FUN_NUM
  (IN_CNAME IN CLASSTAB.CNAME%TYPE)
RETURN NUMBER
  AS
    OUT_NUM NUMBER;
BEGIN
  IF IN_CNAME ='3G' THEN
      SELECT COUNT(CNAME) INTO OUT_NUM FROM V_SC WHERE CNAME='3G';
    ELSIF IN_CNAME='SVSE' THEN
      SELECT COUNT(CNAME) INTO OUT_NUM FROM V_SC WHERE CNAME='SVSE';
    ELSIF IN_CNAME = 'GIS' THEN
      SELECT COUNT(CNAME) INTO OUT_NUM FROM V_SC WHERE CNAME='GIS';
    ELSIF IN_CNAME = 'EM' THEN
      SELECT COUNT(CNAME) INTO OUT_NUM FROM V_SC WHERE CNAME = 'EM';
  END IF;
RETURN OUT_NUM;
END FUN_NUM;
--调用函数
SELECT DISTINCT FUN_NUM('GIS') AS 人数 from V_SC;

--创建存储过程  给学生表添加一条记录
CREATE OR REPLACE PROCEDURE PROCEDURE_ADD
  (IN_ID IN STUDENT.ID%TYPE,IN_SNAME STUDENT.SNAME%TYPE,IN_CLASSNAME STUDENT.CLASSNAME%TYPE)
AS
BEGIN
  INSERT INTO STUDENT VALUES(IN_ID,IN_SNAME,IN_CLASSNAME);
  DBMS_OUTPUT.PUT_LINE('数据添加成功!');
END PROCEDURE_ADD;
--调用过程的时候  因为这是添加数据  所以添加完后 要commit提交 不然显示不了添加的数据 
--在调用之前要SET SERVEROUT ON
EXECUTE PROCEDURE_ADD(NULL,'AA',3);

--创建序列
CREATE SEQUENCE SEQ_STU
INCREMENT BY 1
START WITH 11
MAXVALUE 99999
MINVALUE 1;

--创建触发器  添加数据的时候id自增
CREATE OR REPLACE TRIGGER TIGGER_STU
BEFORE
  INSERT ON STUDENT
  FOR EACH ROW
  WHEN(NEW.ID IS NULL)
BEGIN
    SELECT SEQ_STU.NEXTVAL INTO:NEW.ID FROM DUAL;
END;

INSERT INTO STUDENT VALUES(NULL,'AA',2);

--创建触发器  删除班级时  将该班级的所有学生信息也删除
CREATE OR REPLACE TRIGGER MYTRIGGER
  AFTER DELETE 
  ON CLASSTAB
  FOR EACH ROW
BEGIN
  DELETE FROM STUDENT WHERE CLASSNAME = :old.CLASSID;
END;
--:old.CLASSID 是触发器操作的那种表  :old就相当于那张表  本例子中触发器操作的是CLASSTAB这张表  所以:old相当于CLASSSTAB这张表
DELETE FROM CLASSTAB WHERE CLASSID = 2;

SELECT * FROM STUDENT;
SELECT * FROM CLASSTAB;

关于oracle的函数,存储过程,触发器,序列,视图,左右连接一些的应用 带案例的更多相关文章

  1. oracle 游标/函数/存储过程/触发器 表空间

    --存储过程,循环create or replace procedure delTables(ename t_emp.ename%TYPE)AScon number;i NUMBER := 1;tab ...

  2. Mysql 存储过程、函数、触发器和视图的权限检查

    当存储过程.函数.触发器和视图创建后,不单单创建者要执行,其它用户也可能需要执行,换句话说,执行者有可能不是创建者本身,那么在执行存储过程时,MySQL是如何做权限检查的? 在默认情况下,MySQL将 ...

  3. SqlServer数据库字典--表.视图.函数.存储过程.触发器.主键.外键.约束.规则.sql

    SELECT DISTINCT       TOP 100 PERCENT isnull(p.name,'') AS 父对象, o.xtype,       CASE o.xtype WHEN 'C' ...

  4. Oracle 基本语法、触发器、视图

    参考文章:https://www.cnblogs.com/linjiqin/category/349944.html 数据库分类 1.小型数据库:access.foxbase 2.中型数据库:inor ...

  5. Oracle_视图_索引_plsql_游标_存储过程_存储函数_触发器

    -- 感觉有用点个赞呗^v^ select * from emp; drop view persin_vw;--删除视图 create table emp as select * from scott ...

  6. Oracle03——游标、异常、存储过程、存储函数、触发器和Java代码访问Oracle对象

    作者: kent鹏 转载请注明出处: http://www.cnblogs.com/xieyupeng/p/7476717.html 1.游标(光标)Cursor 在写java程序中有集合的概念,那么 ...

  7. Oracle学习(12):存储过程,函数和触发器

    存储过程和存储函数 l存储在数据库中供全部用户程序调用的子程序叫存储过程.存储函数. 注意:存储过程与存储函数声明变量时,用的是as   而不是declare 存储过程与存储函数差别 存储过程不带有返 ...

  8. MySQL 第十天(视图、存储过程、函数、触发器)

    MySql高级-视图.函数.存储过程.触发器 目录 一.视图    1 1.视图的定义    1 2.视图的作用    1 (1)可以简化查询.    1 (2)可以进行权限控制,    3 3.查询 ...

  9. python 全栈开发,Day64(视图,触发器,函数,存储过程,事务)

    昨日内容回顾 pymysql:属于python的一个模块 pip3 install pymysql conn = pymysql.connect(...,charset = 'uft8') 创建游标 ...

随机推荐

  1. caffe---测试模型分类结果并输出(python )

    当训练好一个model之后,我们通常会根据这个model最终的loss和在验证集上的accuracy来判断它的好坏.但是,对于分类问题,我们如果只是知道整体的分类正确率 显然还不够,所以只有知道模型对 ...

  2. Linux网络编程-----Socket地址API

    (1) 通用socket地址 socket网络编程接口中表示socket地址的是结构体sockaddr,其定义如下: #include<bits/socket.h> struct sock ...

  3. Codeforces Round #315 (Div. 2)

    这次可以说是最糟糕的一次比赛了吧, 心没有静下来好好的去思考, 导致没有做好能做的题. Problem_A: 题意: 你要听一首时长为T秒的歌曲, 你点击播放时会立刻下载好S秒, 当你听到没有加载到的 ...

  4. Google提议使用Jsonnet来增强JSON

    Google开源了一门配置语言Jsonnet来取代JSON,它完全向后兼容并加入了一些新特性:注释.引用.算术运算.条件操作符,数组和对象内含,引入,函数,局部变量,继承等.Jsonnet程序被翻译为 ...

  5. Greg and Array

    Codeforces Round #179 (Div. 2) C:http://codeforces.com/problemset/problem/296/C 题意:给你一个序列,然后有两种操作,第一 ...

  6. 有感,懂市场比懂产品重要,懂产品比懂技术重要——想起凡客诚品和YY语音了

    一个创业公司,最好三样都要有,但应该CEO是懂市场,经理懂产品,程序员最好懂技术厉害一点-这还不算,销售也要厉害一点,不能守株待兔- 美工——有钱最好请个美工,最起码也要请人设计修改一下- 财务——不 ...

  7. 创办支持多种屏幕尺寸的Android应用

    创建支持多种屏幕尺寸的Android应用 Android涉及各种各样的支持不同屏幕尺寸和密度的设备.对于应用程序,Android系统通过设备和句柄提供了统一的开发环境,大部分工作是校正每一个应用程序的 ...

  8. This configuration file was broken by system-config-keyboard

    posts • Page of problem with startx Postby evarie » // :: Normally i can get started with the x wind ...

  9. Unity3d 基于物理渲染Physically-Based Rendering之最终篇

    前情提要: 讲求基本算法 Unity3d 基于物理渲染Physically-Based Rendering之specular BRDF plus篇 Unity3d 基于物理渲染Physically-B ...

  10. Windows下父进程监视子进程状态

    最近研究自动化测试,需要获取程序的运行状态及结果,下面是些参考资料. 原文地址:http://blog.csdn.net/ariesjzj/article/details/7226443 Linux下 ...