oracle索引、视图、存储过程、触发器、oracle数据类型

1、索引:索引是帮助用户在表中快速地找到记录的数据库结构。

a) 自动创建索引:当你为一张表定义主关键或唯一性约束条件时一个惟一的索引就已经被创建了。

b) 手动创建索引: 用户可以自己创建索引。 

创建索引:create  index  索引名 on 表名 (列名1,列名2);

例如:

何时用到索引:表很大,并且在where中经常用到,该列的值取值范围很大时;

不需要索引:表很小时 用不到索引,并且经常更新时;

单一索引与复合索引:

------------单一索引:create index 索引名 on 表名 (列名);

------------复合索引:creat index 索引名 on   表名(列名1,列名2);例如:Create Index i_deptno_job on emp(deptno,job); ------------在emp表的deptno、job列建立索引。

 select * from emp where deptno=66 and job='sals' ->走索引。

    select * from emp where deptno=66 -------------走索引。

     select * from emp where job='sals' ---------------进行全表扫描、不走索引。

如果在where 子句中有OR 操作符单独引用Job 列(索引列的后面  列) 则将不会走索引,将会进行全表扫描。

2、视图:视图是由一个或若干个基表产生的数据的集合,它不占用存储空间。

----------------------视图中并没有存放数据,而仅仅是一条SELECT语句。

创建视图:create or replace view 视图名 as select * from 表名 where  条件;

例如:

查看视图:select* from 视图名;

例如:

--------------------删除视图: Drop view abc;

3、存储过程:

过程procedure 也叫存储过程,是由SQL语句和PL/SQL语句组合在一起为执行某一个任务的一个可执行单位。我们在使用时可以调用,过程没有返回值。 

(1)无参:

create or replace procedure  过程名 as  

声明语段;

begin

执行语句段;

exception

异常处理语句段;

end;

(2)带参数过程的创建

①参数类型

  在PL/SQL过程中,可以有3中类型的参数。

  in 参数:读入参数,主程序向过程传递参数值。

  Out 参数:读出参数,过程向主程序传递参数值。

  in out参数:双向参数,过程与主程序双向交流数

带参创建:

create or replace procedure  过程名(

            参数1[in|out|in out]数据类型

           [,参数2[in|out|in out] 数据类型]

            ……

          [,参数n[in|out|in out] 数据类型]

    )

    (is|as)

        声明语句段;

    Begin

        执行语句段;

    Exception

        异常处理语句段;

    End;

举例:

 

create or replace procedure runbyparmeters_1 (
isal in emp.sal%type,sjob in varchar)
as icount number;
begin
select count(*) into icount from emp where sal>isal and job=sjob;
DBMS_OUTPUT.PUT_LINE('符合条件的记录有 '|| icount || '条');
exception
when too_many_rows then
DBMS_OUTPUT.PUT_LINE('返回值多于1行');
when others then
DBMS_OUTPUT.PUT_LINE('在RUNBYPARMETERS过程中出错!');
end;

在可视化工具里面的 procedure文件夹可以查看过程有没有建立成功;没成功会有一个差号

然后在plsql中传参:

PLSQL中执行

declare

         realsal emp.sal%type;

         realjob varchar(40);

   begin 

         realsal:=1100;

         realjob:='CLERK';

         runbyparmeters_1(realsal,realjob);    

         -- runbyparmeters_1(sjob=>realjob,isal=>realsal);   

  END;  

 

4、触发器:

触发器是一种特殊类型的存储过程,由一些SQL语句组成,主要用于执行强制性的业务规则或要求,但不返回结果。

触发事件或语句:引起触发器被激发的SQL语句,是对指定表执行的INSERT、UPDATE或DELETE语句

触发器限制:一个布尔表达式,当触发器激发时该条件必须为TRUE。触发器的限制是用WHEN子句来指定

--创建触发器

create or replace trigger tri_test

before--触发之前

update or delete--更新或删除

on emp

for each row--对行进行操作

  begin

    dbms_output.put_line(:old.sal);--old表示数据库旧值

    insert into demo(id) values (:new.sal);--new新值

  end;

 

 

update emp set sal=888 where empno=7788;

 

commit;

 

 

先执行创建触发器代码后,再执行最后的更新语句。当更新emp表后将会输出数据库中本来存放的值,并且触发添加语句在demo表中插入一条语句。

 

例如:

create or replace trigger tri_test

before

update or delete or insert

on emp

for each row

  begin

    case

    when updating then

       raise_application_error(-20000,'今天不能修改');

    when inserting then

      raise_application_error(-20001,'今天不能插入');

    when deleting then

      raise_application_error(-20000,'今天不能删除');

    end case;

  end;

修改时触发触发器 

update emp set sal=777 where empno=7788;

insert into emp (empno) values (123);

commit;

如图:

 5、数据类型

--创建表

 create table userinfo

  (

    id number(6,0),

    usernam varchar2(20),

    userpwd varchar2(20),

    email varchar2(30),

     regdate date

 ); 

删除表

 --删除表的结构

  drop table table_name;

 

添加字段 

alter table table_name add column_name datatype;

table_name是表名称,  column_name是列名称,  datatype是数据类型

4.修改表字段名称和表名

--给字段改名

alter table table_name rename column column_name To new_column_name;

--修改表的名字

rename table_name to new_table_name;


5.删除字段

alter table table_name drop column column_name;

6.更改字段长度,类型

eg:修改remarks字段修改字段的长度

alter table userinfo modify remarks varchar2(150);

eg:修改字段类型

      a.如果表中没有数据

alter table 表名 modify(字段名1 类型,字段名2 类型,字段名3 类型.....)

      b.如果表中有数据(分为四步)

--修改原字段名

ALTER TABLE 表名 RENAME COLUMN 字段名A TO 字段名B;

--添加一个和原字段同名的字段"字段名A",添加的字段  

ALTER TABLE 表名 ADD 字段名 目标类型;

--将"字段名B"的数据更新到新建字段"字段名A"中

UPDATE 表名 SET 字段名A = TIRM(字段名B);

--更新完成后,删除原备份字段"字段名B"

ALTER TABLE 表名 DROP COLUMN 字段名B

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

原文地址:https://www.cnblogs.com/yang1182/p/9584437.html