oracle从入门到精通(7)------锁,事务,PL/SQL编程,存储过程

oracle从入门到精通(7)

    1   锁
    2   事务
    3   PL/SQL编程
    4   存储过程
--------------------------------------------------------

锁的两种分类方式:

       按照的锁的范围可分为:   表级行与行级锁
       
       
表级锁:-- 若对表加了表级锁,在锁没有解开之前,其他用户不允许修改表中的任何信息

行级锁: --- 若对表加了行级锁,除了正在操作的这一条数据,不允许被其他用户修改,其他数据允许被其他用户修改


表级锁的语法:

     lock  table   表名  in  exclusive mode;  

行级锁的语法:

     lock table 表名  in  row  exclusive mode;

----------------------------------------------------------------------------------------

按照锁的力度,可分为:  共享锁与排它锁


排它锁: 如果对表加了排它锁,其他用户就不能再对表加任何锁,除非排它锁被解开


lock  table   表名  in  exclusive mode;  --- 排它锁

-----------------------------------------------------------------
共享锁 :如果用户对表加了共享锁,其他用户也可以对表加锁,但是只能加:--共享锁


如果用户对表加了共享锁,就代表这张表对于其他用户而言,是只读的,只有当锁被解开,才能对表进行修改


--共享锁的语法:



lock  table   表名  in  share mode; 




---对表加锁的目的                 为了保证数据的准确性

drop table bank;

create table bank
(
       accecssName varchar2(20),--帐户名称
       amount number(11) check (amount>=10) --帐户余额
)

insert into bank values('张三',10);
insert into bank values('李四',201);

select * from bank;

update bank set amount=amount+200 where accecssName='张三';
update bank set amount=amount-200 where accecssName='李四';


commit;---是用于提交的命令;


--用于进行数据的回滚,之前没有提交的操作,全部都会回滚
rollback;




---事务:在数据库中,执行的一批sql语句,要么都要成功,如果有一条失败,整个操作要全部失败





如果一批语句全部操作成功,才commit;如果有一条语句操作失败,就应该全部回滚 rollback;



drop table bank;

create table bank
(
       accecssName varchar2(20),--帐户名称
       amount number(11) check (amount>=10) --帐户余额
)

insert into bank values('张三',10);
insert into bank values('李四',201);

savepoint one;

update bank set amount=amount+200 where accecssName='张三';
update bank set amount=amount-200 where accecssName='李四';

--未提交的数据,全部回滚
rollback;
--回滚所有没有保存的数据
rollback to one;

select * from bank;
--提交所有数据
commit;



commit;--提交数据
rollback;---回滚数据
savepoint  名称;--设置保存点(用于回滚到指定处)

rollback to  保存点;


回滚的时候:所有没有提交的数据,都会被回滚

回滚到某一保存点,只会回滚指定数据



----------------------------------------------

PL/SQL

什么是PL/SQL语句;

PL/SQL             Procedure Language /  Structured Query  Language 

PL/SQL:      过程化语言/结构化查询语言

这一类型的语句,主要用于编写:  函数、存储过程、触发器、游标

-----------------------------------------------------------------------
PL/SQL语句的基本语法:

declare
     --此处用于声明各种类型的变量、常量
begin
     --此处用于编写各种PS/SQL语句
end;

------------------------------------------------------------------------

如果语句不需要声明变量、常量,可以省略掉declare


示列:
 
begin 
     dbms_output.put('这是第一条测试语句');
     dbms_output.put('这是第二条测试语句');
     dbms_output.put_line('');
end;




 dbms_output.put_line();--用于输入一句字符,并且换行
 dbms_output.put('这是第一条测试语句'); --输入一条语句,但是不换行


---示例2

declare
      amount number(20);                                                            
begin
      amount:=&请输入要循环的次数;

     for i in 1..amount
         loop
              dbms_output.put_line(i);
         end loop;
end;

--
示例:
declare 
         k number(10):=1;

begin
         while(k<10)
             loop
                   dbms_output.put_line(k);
                   k:=k+1;
             end loop;
end;

---
示例:  ---if ...else 结构
    
declare
             score number(11) :=98;
begin
             if(score>=90) 
                   then dbms_output.put_line('优秀');
             else
                   dbms_output.put_line('要继续努力');
             end if;      
end;
--  类似于switch的结构
declare 
    score number:=28;
begin
    case
          when score>=90 then dbms_output.put_line('优秀');
          when score>=80 then dbms_output.put_line('良好');
          when score>=60 then dbms_output.put_line('及格');
          when score<50 then dbms_output.put_line('不及格');
    end case;
end;


------------------------------
select * from infs;
truncate table infs;

create sequence infs_seq;
------------------------------

begin
       for i in 3..10
           loop
                  insert into infs values(infs_seq.nextval,'name'||i);
           end loop;
       commit;           
end;

-------
示例:
declare 
       i number(11);
       j number(11);
begin
       for i in 1..10
           loop
                for j in 1..i
                    loop
                      dbms_output.put('*');        
                    end loop;
                 dbms_output.put_line('');
           end loop;
end;




declare
           i number(11);
           j number(11);
           k number(11);
begin
           
           for i in 1..10
               loop
                    for j in 1..10-i
                        loop
                          dbms_output.put(' ');     
                        end loop;
                        
                    for k in 1..2*i-1
                        loop
                          dbms_output.put('*');
                        end loop;   
                    dbms_output.put_line('');
               end loop;
           
end;






select * from infs;
--------------------------------
begin
      -- update infs set name='bruce' where id=10;
      delete from infs where id=17;
       commit;
end;

-----------------------------------PL/SQL语句中的查询

declare
       username varchar2(20);
       mid number(10);
begin
       mid:=&请输入要查询的编号;
       
       select name  into username  from infs where id=mid;
       dbms_output.put_line('查询的结果是:'||username);
end;





begin
       
-----------------------------------------

存储过程: 提前编写好一些要执行的命令,存在数据库中并不运行,当我们调用这些存储过程的时候,存在于数据库中
的这些语句,就会马上运行

-------
存储过程的基本语法:

create or replace procedure 存储过程名称
as

begin
       --此处用于写各种存储过程语句;
end;

---------------------------------------------------------------
示例:
create or replace procedure my_pc
as 
begin
       dbms_output.put_line('ok');
end;

---调用存储过程
begin
        my_pc();
end;


------------------------------------------------------------------

drop sequence inf_seq;
create sequence inf_seq;
create table inf
(
      id number primary key,
      name varchar2(20),
      age number(11)
)

create or replace procedure inf_pc
as
begin
       for i in 1..100
           loop
                insert into inf values(inf_seq.nextval,'name'||i,23);
           end loop;
       commit;
end;

select * from inf;



--调用存储过程  --第一种调用方式
begin
       inf_pc();
end;

truncate table inf;




-------存储过程分为: 

不带参数的存储过程


带参数的存储过程:
         输入参数
         输出参数
         输入输出参数























  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值