关于oracle的函数,存储过程,触发器,序列,视图,左右连接一些的应用 带案例
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的函数,存储过程,触发器,序列,视图,左右连接一些的应用 带案例的更多相关文章
- oracle 游标/函数/存储过程/触发器 表空间
--存储过程,循环create or replace procedure delTables(ename t_emp.ename%TYPE)AScon number;i NUMBER := 1;tab ...
- Mysql 存储过程、函数、触发器和视图的权限检查
当存储过程.函数.触发器和视图创建后,不单单创建者要执行,其它用户也可能需要执行,换句话说,执行者有可能不是创建者本身,那么在执行存储过程时,MySQL是如何做权限检查的? 在默认情况下,MySQL将 ...
- SqlServer数据库字典--表.视图.函数.存储过程.触发器.主键.外键.约束.规则.sql
SELECT DISTINCT TOP 100 PERCENT isnull(p.name,'') AS 父对象, o.xtype, CASE o.xtype WHEN 'C' ...
- Oracle 基本语法、触发器、视图
参考文章:https://www.cnblogs.com/linjiqin/category/349944.html 数据库分类 1.小型数据库:access.foxbase 2.中型数据库:inor ...
- Oracle_视图_索引_plsql_游标_存储过程_存储函数_触发器
-- 感觉有用点个赞呗^v^ select * from emp; drop view persin_vw;--删除视图 create table emp as select * from scott ...
- Oracle03——游标、异常、存储过程、存储函数、触发器和Java代码访问Oracle对象
作者: kent鹏 转载请注明出处: http://www.cnblogs.com/xieyupeng/p/7476717.html 1.游标(光标)Cursor 在写java程序中有集合的概念,那么 ...
- Oracle学习(12):存储过程,函数和触发器
存储过程和存储函数 l存储在数据库中供全部用户程序调用的子程序叫存储过程.存储函数. 注意:存储过程与存储函数声明变量时,用的是as 而不是declare 存储过程与存储函数差别 存储过程不带有返 ...
- MySQL 第十天(视图、存储过程、函数、触发器)
MySql高级-视图.函数.存储过程.触发器 目录 一.视图 1 1.视图的定义 1 2.视图的作用 1 (1)可以简化查询. 1 (2)可以进行权限控制, 3 3.查询 ...
- python 全栈开发,Day64(视图,触发器,函数,存储过程,事务)
昨日内容回顾 pymysql:属于python的一个模块 pip3 install pymysql conn = pymysql.connect(...,charset = 'uft8') 创建游标 ...
随机推荐
- Entity Framework 实践系列 —— 搞好关系 - 单相思(单向一对一,one-to-one)【转】
原以为躲入代码世界,就可以不用搞关系,哪知“关系无处不在”.写代码多年之后,终于明白“面向对象的关键是搞好对象之间的关系”.而Entity Framework作为ORM中的明日之星,首当其冲的使命就是 ...
- For Aisha(阿伊莎)
相见时难别亦难,东风无力百花残.by:昂思多,20160524 跟你在一起,没有拘束感,完全就像是在跟亲人对话. 很喜欢这种感觉 虽然才认识不到10天,却就像是认识了好几年的老朋友 真的喜欢叫你“阿伊 ...
- Xcode中报错或警告信息整理,持续更新...
整理报错和警告信息,为以后自己查看方便用! [报错1] 信息:Static table views are only valid when embedded in UITableViewContro ...
- Matlab norm 用法小记
Matlab norm 用法小记 matlab norm (a) 用法以及实例 norm(A,p)当A是向量时norm(A,p) Returns sum(abs(A).^p)^(1/p), for ...
- UVA 1329 - Corporative Network
带权值的并查集的应用: 代码: #include<cstdio> #include<algorithm> #include<cmath> #include<c ...
- node c#
blogs.msdn.com/b/brunoterkaly/archive/2012/02/22/node-js-socket-programming-with-c-and-javascript.as ...
- (转载)linux中shell变量
(转载)http://blog.csdn.net/zahuopuboss/article/details/8633891 为使shell编程更有效,系统提供了一些shell变量.shell变量可以保存 ...
- 参数化时按行读取txt文件,如何去掉换行符"\n"
参数化按行读取txt,每行默认自带了回车换行操作,导致脚本报错,故而按行读取时,需要去掉默认的'\n' #coding=utf-8 from selenium import webdriver imp ...
- c语言运算符号详细说明
C语言中具有右结合性的运算符包括所有单目运算符以及赋值运算符(=)和条件运算符.其它都是左结合性. 判断表达式计算顺序时,先按优先级高的先计算,优先级低的后计算,当优先级相同时再按结合性,或从左至右顺 ...
- 神器 Sublime Text 3 的一些常用快捷键
选择类 Ctrl+D 选中光标所占的文本,继续操作则会选中下一个相同的文本. Alt+F3 选中文本按下快捷键,即可一次性选择全部的相同文本进行同时编辑.举个例子:快速选中并更改所有相同的变量名. ...