Oracle SQL脚本学习记录五
2014-06-04 00:00
218 查看
摘要: Oracle SQL脚本学习记录五
declare x number; begin x:=0; loop x:=x+1; if x>=3 then exit; end if; DBMS_OUTPUT.PUT_LINE(‘内:x=’||x); end loop; DBMS_OUTPUT.PUT_LINE(‘外:x’||x); end; / —-while declare x number; begin x:=0; while x<=3 loop x:=x+1; DBMS_OUTPUT.PUT_LINE(‘内:x=’||x); end loop; DBMS_OUTPUT.PUT_LINE(‘out:x=’||x); end ; / —-for 一般不写 declare 递增递减 量 不能变 begin for i in 1..5 loop DBMS_OUTPUT.PUT_LINE(‘i=’||i); end loop; DBMS_OUTPUT.PUT_LINE(‘end of for loop’); begin for i in reverse 1..5 loop DBMS_OUTPUT.PUT_LINE(‘i=’||i); end loop; DBMS_OUTPUT.PUT_LINE(‘end of for loop’); declare test varchar(12); begin select name into test from deptement where id=’tt’; DBMS_OUTPUT.PUT_LINE(test); exception when NO_DATA_FONUD THEN DBMS_OUTPUT.PUT_LINE(‘NOTHINGS’); END; 自定义异常 DECLARE tname varchar2(10); e exception; begin select name into tname from deptment where id=’01′; if tname<>’B部门’ then raise e;//抛出异常 end if ; DBMS_OUTPUT.PUT_LINE(tname); exception where e then DBMS_OUTPUT.PUT_LINE(‘false is not b’);\ end ; / —记录使用方式 declare type myrecord is RECORD id varchar2(10), name varchar2(10); real_record myrecord;—声明 begin select eid,ename into real_record from emp where eid=’001′; DBMS_OUTPUT.PUT_LINE(real_record.id||’,'||real_record.name); end; / declare type myrecord is RECORD id emp.id%type, name varchar2(10); real_record myrecord;—声明 begin select eid,ename into real_record from emp where eid=’001′; DBMS_OUTPUT.PUT_LINE(real_record.id||’,'||real_record.name); end; / declare myrec emp%ROWTYPE; begin select * into myrec from emp where eid=’001′; DBMS_OUTPUT.PUT_LINE(myrec.eid||’,'myrec.ename); end; / —游标 declare CURSOR mycur is select * from books ; myrecord books%rowtype; begin open mycur –打开游标 fetch mycur into myrecord; –把游标放到对应的变量 while mycur%FOUND then loop DBMS_OUTPUT.PUT_LINE(myrecord.books_id||’ , ‘||myrecord.books_name); fetch mycur into myrecord; end loop; close mycur; end ; / —–带参数 的游标 declare cursor cur_para(id varchar2) is select books_name from books where books_id=id; t_name books.books_name%type; begin open cur_para(’0001′); loop fetch cur_para into t_name; exit when cur_para%NOTFOUND; DBMS_OUTPUT.PUT_LINE(t_name); end loop; close cur_para; end ; / declare cursor cur_para(id varchar2) is select books_name from books where books_id=id; ——for 循环 不需要 open 和 close begin DBMS_OUTPUT.PUT_LINE(‘***********RESLUES***********’); FOR cur in cur_para(’0001′) loop DBMS_OUTPUT.PUT_LINE(cur.books_name); end loop; end ; / declare t_name books.books_name%type; cursor cur(id varchar2) is select books_name from books where books_id=id; begin if cur%isopen then DBMS_OUTPUT.PUT_LINE(‘cur is opened’); else open cur(’0003′); end if; fetch cur into t_name; DBMS_OUTPUT.PUT_LINE(‘cur is closed’||t_name); close cur; end ; / ————rowcount use method declare t_name varchar2(10); cursor mycur is select name from deptment; begin open mycur; loop; fetch mycur into t_name; exit when mycur%notfound or mycur%notfound is null ; DBMS_OUTPUT.put_line(‘mycur is rowcount is’||mycur%ROWCOUNT); end loop; close mycur; end ; / ———–游标修改数据 select 后一点有选项 for update declare cursor cur is select name from deptment for update; text varchar2(10); open cur; fetch cur into text; while cur%rowcount loop update deptment set name=name||’t’ where CURRENT OF cur; fetch cur into text; end loop; close cur; end ; / ——————————–隐式游标 begin for cur in(select name from deptment) loop dbms_output.put_line(cur.name); end loop; end; / —————————-存储过程 create or replase proceduer myproc(id in varchar2)—不要给长度 is name varchar2(10);——–一定要有长度 begin select books_name into name from books where books_id=id; DBMS_OUTPUT.PUT_LINE(name); end ; end myproc; / show errors;—显示错误信息 一条信息 show errors procedure myproc ——————–执行过程 declare tid varchar2(10); begin tid:=’0001′; myproc(tid)l end; / ——————-简化 begin myproc(’0001′); end; / execute myproc(’0001′); —-过程不带参数 或 过程是输入参数 不能在begin写 executre ———–触发器 create or replace trigger del_deptid after delete on deptment —作用到表上的 for each row begin delete from emp where id:=old.id; end del_deptid; / –alert create or replace trigger insert_deptid after insert on deptment —作用到表上的 for each row begin insert into emp(eid,ename,id) valus(’121′,’wqwe’,:new.id); end insert_deptid; / create or replace trigger update_dept after update on deptment for each row begin update emp set id=:new.id where id=:oid.id; end; / create or replace trigger books_delete after delete on books for each row —-行级触发器 begin if ld.books_id =’0001′ then RAISE_APPLICATION_ERROR(-20000,’NOT ALLOW DELELE’); —标识在 20000—20999 end if; end; / —————-触发器里面不能 有 DBMS_OUTPUT.PUT_LINE(); 和 rollback 和 commit语句 语句 级别的触发器 create table mylog(curr_user varchar2(100),curr_date date,act char(1)); create or replace trigger dml_aa after insert or delete or update begin if inserting then insert into mylog values(user,sysdate,’1′); elsif deleting then insert into mylog values(user,sysdate,’d'); else insert into mylog values(user,sysdate,’u'); end if; end; / CREATE OR REPLACE TRIGGER set_no before insert on auto for each row declare sn number(5); begin select myseq.nextval into sn from dual; :NEW.a:=sn; end ; /
相关文章推荐
- Oracle SQL脚本学习记录一
- Oracle SQL脚本学习记录四
- Oracle SQL脚本学习记录二
- 数据库学习之一: 在 Oracle sql developer上运行SQL必知必会脚本
- oracle使用sql脚本生成csv文件案例学习
- 常用的SQL*PLUS命令 ,SQL缓冲区操作和最基本的脚本操作(从实践中学习Oracle SQL-第三章)
- Oracle SQL脚本学习6
- Oracle SQL脚本学习记录三
- 两天的oracle学习经验,以及对数据库脚本的认识。sql语句的一些细节还是费了不少劲的。
- PL/Sql循序渐进全面学习教程--Oracle
- Oracle SQL性能优化系列学习一
- Oracle SQL性能优化系列学习一
- Oracle SQL性能优化系列学习三
- Oracle SQL性能优化系列学习二
- oracle学习总结三(创建脚本)
- oracle学习---简单的sql语句查询
- PL/Sql循序渐进全面学习教程--Oracle
- PL/Sql循序渐进全面学习教程--Oracle (转载)
- Oracle PL/Sql循序渐进全面学习教程