Oracle数据库学习总结
Oracle是一个数据存储量较大,数据操控简单的数据库,可使用SQL语言和PL/SQL进行数据操作,灵活性强,但相比于SQLserver 操作难度要大一些;
Oracle的数据类型于SQLserver基本相似, 区别在于整形数字和字符类型 SQLserverv的是int和varchar()类型,Oracle是number和varchar2();其余的基本类似。
Oracle最主要的是支持大量PL/SQL语言,有函数,游标 ,触发器的使用,使得数据存储操作变得更灵活,有一点,PL/SQL不支持对象打印。
以emp表为例
函数function :
CREATE OR REPLACE FUNCTION 函数名(随便自己写)
RETURN NUMBER(返回类型)
AS
DECLARE
-----要执行的代码(类似java)
SAL EMP.DEPTNO%TYPE;
BEGIN
SELECT DEPTNO INTO SAL FROM EMP WHERE EMPNO=7698;
IF SAL=10 THEN
DBMS_OUTPUT.PUT_LINE(‘A’);
ELSIF SAL=20 THEN
DBMS_OUTPUT.PUT_LINE(‘B’);
ELSE
DBMS_OUTPUT.PUT_LINE(‘C’);
END IF;
END;
游标 CURSOR:
1 步骤
– 1.定义游标(在declare中)
– cursor myc is select * from xx;
– 2.开启游标(在begin中)
– open myc;
– 3.数据的处理工作(从游标中取出需要的数据)
– fetch myc into xx;
– 4.关闭游标
– close myc;
2.游标的状态
–%found 游标当中有数据
–%notfound 游标当中无数据
–%rowcount 收到受影响的行数
—%isopen 游标是否打开
例:静(查询emp中的名字name和工资sal)
DECLARE
CURSOR MYC IS SELECT *FROM EMP ;
MY_ROW EMP%ROWTYPE;
BEGIN
OPEN MYC ;
LOOP
FETCH MYC INTO MY_ROW ;
EXIT WHEN MYC%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(MY_ROW.ENAME||MY_ROW.SAL);
END LOOP;
CLOSE MYC ;
END;
3.动态游标
– 游标在声明时没有设定,在打开时可以对其进行修改
– 强类型游标 有return
– type my_t is ref cursor return xx%rowtype;
– 弱类型游标 无return
– type c1 is ref cursor;
– 动态游标无法使用for循环遍历
–触发器
–数据发生改变的时候(增删改)
– 系统自己调用
– 触发器的分类
–before 前
–after 后
–分类
–行级触发器 for each row
– 每一行都会触发
–语句级触发器
– 不写 for each row
–执行一次
–
– 触发器触发时会建立两个表
–增--new
–删-- old
– 改-- new – old
–触发顺序
– before -执行前触发
– SQL 语句执行
–afore 执行后触发
例:
CREATE OR REPLACE TRIGGER TRI_STU_DELETE
BEFORE DELETE–触发时间
ON STUINFO --触发的表
FOR EACH ROW --触发的级别
BEGIN
IF :OLD.stuName='李斯文' THEN
RAISE_APPLICATION_ERROR(-20001,'不能删除此员工');
END IF;
END;
–触发器的调用
DELETE STUINFO WHERE stuName=‘李斯文’;
即触发器已经成功启用。
相较于SQLserver ,Oracle无法使用主键进行自增操作,Oracle却引用了“序列”
实现主键自增
序列 sequence :
create sequence seq_e ;
– 序列即是一个自增的数字
currval–当前的值
nextval – 下一个值
使用:
SELECT SEQ_E.NEXTVAL FROM DUAL;
SELECT SEQ_E.CURRVAL FROM DUAL;