公司网站开发国内外现状,广告设计与制作教程,学校网站建设流程图,定制高端网站建设优质博文#xff1a;IT-BLOG-CN
一、视图
从表中抽出的逻辑上相关的数据集合#xff0c;视图是一种虚表#xff0c;视图是建立在已有表的基础之上#xff0c;视图赖以建立的这些表称为基表。向视图提供数据的是 SELECT语句#xff0c;可以将视图理解为存储起来的SELECT语…优质博文IT-BLOG-CN
一、视图
从表中抽出的逻辑上相关的数据集合视图是一种虚表视图是建立在已有表的基础之上视图赖以建立的这些表称为基表。向视图提供数据的是 SELECT语句可以将视图理解为存储起来的SELECT语句。视图中的数据会随着基表的变化而变化。
那为什么要使用视图呢 1、控制数据访问 2、简化查询 3、避免重复访问相同的数据
【1】创建视图语句CREATE VIEW举个栗子看下
create or replace view empview
as
select employee_id emp_id,last_name name,department_name
from employees e,departments d
Where e.department_id d.department_id【2】删除视图DROP VIEW 【3】TOP_N分析分析查询一个列中最大或最小的n个值其实就是现实列的个数相当于Mysql中的limit
二、存储过程
存储过程是存储在数据库中提供所有用户程序调用的子程序。它存储在数据库中一次编译后永久有效用户通过指定存储过程的名字并给出参数如果该存储过程带有参数来执行它。存储过程是数据库中的一个重要对象。在数据量特别庞大的情况下利用存储过程能达到倍速的效率提升
--创建存储过程的语句
create [or replace] procedure 存储过程名[(参数1 类型参数2 out 类型……)]as变量名 类型begin程序代码体end;【栗子】认真看看也就懂了
--如果命令行中创建时修改结束语
delimiter //
create or replace procedure p2
(name in varchar2,age int,msg out varchar2)
--参数列表中声明变量类型时切记不能定义大小只写类型名即可例如参数列表中的name变量的声明
--参数列表中输入参数用in表示输出参数用out表示不写时默认为输入参数。
------------输入参数不能携带值出去输出参数不能携带值进来当既想携带值进来又想携带值出去可以用in out
as--存储过程中定义的参数列表当然我就举个栗子下面这个参数后续无用last_name varchar(50);
beginSELECT name FROM table WHERE id1 INTO msg;--赋值时除了可以使用还可以用into来实现--上面子句等价于select 姓名||name||,年龄||age into msg from dual;
end;
//--执行存储过程
--在SQLPlus中运行PL/SQL块前如果要将执行结果输出需要先执行 set serveroutput on 命令
set serveroutput on;
declaremsg varchar2(100);
--SQL环境下基本语法为call sp_name [参数名]
--PL/SQL环境下基本语法为begin sp_name [参数名] end
beginp2(张三,23,msg);dbms_output.put_line(msg);
end;三、函数
函数与存储过程的结构类似但是函数必须有一个return子句用于返回函数值。
--创建序列号格式
CREATE SEQUENCE sequence[INCREMENT BY n] --每次增长的数值[START WITH n] --从哪个值开始[{MAXVALUE n | NOMAXVALUE}][{MINVALUE n | NOMINVALUE}][{CYCLE | NOCYCLE}] --是否需要循环[{CACHE n | NOCACHE}]; --是否缓存登录【栗子】好好研究下吧精华都在下面
create or replace function f1
RETURNS varchar--必须有返回值且声明返回值类型时不需要加大小
asmsg varchar(50);
beginmsg : hello world;return msg;
end;--执行函数方式1
select f1() from dual;
--执行函数方式2
set serveroutput on;
begin dbms_output.put_line(f1());
end;【总结】函数与存储过程的区别执行方式略有不同存储过程的执行方式有两种①:使用execute②:使用begin和end函数除了存储过程的两种方式外还可以当做表达式使用例如放在select中select f1() form dual;。还有就是如果只有一个返回值用存储函数否则一般用存储过程。
四、序列
提供有规律的数值可供多个用户用来产生唯一数值的数据库对象。主要用于提供主键值。将序列装入内存可以提高访问效率。
--创建序列号格式
CREATE SEQUENCE sequence[INCREMENT BY n] --每次增长的数值[START WITH n] --从哪个值开始[{MAXVALUE n | NOMAXVALUE}][{MINVALUE n | NOMINVALUE}][{CYCLE | NOCYCLE}] --是否需要循环[{CACHE n | NOCACHE}]; --是否缓存登录【1】查询数据字典视图USER_SEQUENCES获取序列定义信息。 【2】NEXTVALUE返回序列中下一个有效的值任何用户都可以引用。CURRVAL存放序列的当前值。 【3】修改序列修改序列的增量、最大值、最小值、循环选项、是否装入内存。
ALTER SEQUENCE dept_deptid_seqINCREMENT BY 20MAXVALUE 999999NOCACHENOCYCLE;【4】删除序列DROP SEQUENCES语句删除。
DROP SEQUENCE dept_deptid_seq;五、索引
提高查询效率一种独立与表的模式对象可以存储在于表不同的磁盘或表空间索引损坏只影响查询速度。 【1】自动创建索引在定义PRIMARY KEY或UNIQUE约束后系统自动在响应的列上创建唯一性索引。 【2】手动创建索引可以在其他列上添加非唯一索引以加速查询。
CREATE INDEX index
ON table (column[, column]...);【3】当出现如下情况时适合创建索引①、列中数据值分布范围很广。②、列经常出现在WHERE子句或连接条件中。③、表经常被访问而且数据量很大访问的数据大概占数据总量的2%到4%。 【4】查询索引USER_INDEXS删除索引DROP INDEX index
六、同义词
给对象起别名缩短名字方便访问。
CREATE [PUBLIC] SYNONYM synonym
FOR object;七、触发器
触发器是在事件发生时隐式地自动运行的PL/SQL程序块不能接收参数不能被调用。
DELIMITER // --先临时修改一下语句分隔符这样就可以在触发器定义中使用分号CREATE[ORREPLACE]TRIGGER trigger_name{BEFORE|AFTER}{INSERT|DELETE|UPDATE[OF column[,column…]]}ON{table_name|view_name}[REFERENCING{OLD[AS]old_name|NEW[AS]new_name}][FOR EACHROW][WHEN trigger_condition]trigger_body;--尾随一个实例
DELIMITER //
CREATE OR REPLACE TRIGGER POLEINFOTABLE_CYCLE AFTER INSERT OR UPDATE OF CIRCUITRYTYPEPARTAL,TESHUQUPARTAL,UNITSTATUSPARTAL ON POLEINFOTABLE FOR EACH ROW DECLARE PRAGMA AUTONOMOUS_TRANSACTION; BEGIN --这里可以使用 OLD 和 NEW ;--old表示插入之前的值new表示新插入的值old用在删除和修改new用在添加和修改update poleinfotable set MINCYCLEleast(CIRCUITRYTYPEPARTAL,UNITSTATUSPARTAL,TESHUQUPARTAL);
COMMIT;
END;
//
DELIMITER ;