Oracle学习笔记2

DDL(database define language)数据库定义语言

创建表:create table tablename(….)

修改表:alter table tablename add(columnname type …);
alter table tablename modify …

删除表:drop table tablename


约束

  • 主键Primary key
  • 非空约束NOT NULL
  • 唯一约束Unique
  • 外键约束foreign key
  • 检查性约束check(加在列后写上对列条件)

DML(database manager language)数据库操作语言

INSERT INTO TABLENAME() VALUES()

UPDATE TABLENAME SET COLUMN=VALUE… WHERE 条件

DELETE FROM TABLENAME WHERE 条件


视图view

简化复杂的查询,查询部分数据作为一个视图
create view view_name as (查询语句)
create or replace view view_name as ….


序列SEQUENCE

若想和mysql等数据库一样实现某列自动增长的功能,可以利用序列

其中有两个变量:
nextval:取得序列的下一个内容
currval:取得序列的当前内容
先创建序列:
CREATE SEQUENCE SEQUENCENAME
INCREMENT BY 10
START WITH 120
MAXVALUE 9999
NOCACHE
NOCYCLE;

自增这样写:insert into tablename values(列名.nextval….)

索引index

单列索引:
create index indexname on tablename(columnname)

复合索引
create index indexname on tablename(…)

当数据量较大的时候,索引能加快查询速度。

同义词SYNONYM

CREATE PUBLIC SYNONYM synonymname for othertable.emp


PL/SQL

declare
这里写一些说明(变量定义什么的。。。)
begin
代码部分,语句序列,DML
exception
例外语句,类似异常处理
End;

选择

循环


游标cursor


使用

例:

declare    //声明部分
    cursor cl is  //声明游标
        select * from emp;  //游标指向
    pemp emp%rowtype;    //声明变量,类型为emp表
begin  
    open cl;    //打开游标
        loop    
            fetch cl    //取一行游标的值
                into pemp;    //放入pemp变量中
            exit when cl%notfound;    //当游标为空的时候跳出循环
            dbms_output.put_line(pemp.empno || ' ' || pemp.ename);    //打印变量所指行的信息
        end loop
    close cl    //关闭游标
end; 

也可以指定游标的类型为特定的某一行


例外exception

类似与java,也可以自己手动抛出异常。

自定义异常需要在declare中定义,然后使用时可以加入条件控制中,如果不正确可以抛出(raise)一个异常,然后进入exception块中

exception
     when   自定义异常名   then
         处理语句

存储过程procedure


在AS或者IS后可以加变量定义。
调用

存储函数function

存储函数和存储过程一般来说没有什么区别,返回结果的数量可以通过参数里的out指定

create or replace function  empincome (eno in emp.empno%type) return number is  //声明存储过程
    psal emp.sal%type;  //定义薪水变量
    pcomm emp.comm%type;  //定义奖金变量
begin
    select t.sal,t.pcomm into psal,pcomm from emp t where t.empno=eno;
    return psal*12+nvl(pcomm,0);
end

用存储过程实现


java调用存储过程

若使用游标

只需要将游标提取,然后用ResultSet类型转换即可查询游标所指内容

另外,写在过程中out语句后的用来返回结果集的游标类型应该为sys_refcursor,具体可以查看

https://www.cnblogs.com/liuqiyun/p/6796740.html


触发器TRIGGER

触发器自带变量

另外一般不允许多个触发器对同一张表进行操作或者在触发器中对同一张表进行操作,容易产生递归循环触发。