Oracle光速入门二 ——马士兵Oracle视频讲义笔记
其实Oracle的管理没传说中那么难,刚到地税局搞运维,我基本就不会Oracle,仅仅熟悉MySQL,这东西听听课,只要笔记做得好,根本不用往脑子里记,用的时候翻出来照着颜色往上敲,就这么简单,又不是搞开发,大家真别被这破东西吓住了,不信往下看,绝对看一遍半小时全部掌握,不用记,用的时候看颜色往上敲就行了。本人blog全部位原创,转载请注明源地址。 第四代语言 查询语句、dml数据操作语句、ddl数据定义语句 PL/SQL declare 从这里变量声明 begin exception catch到exception when others then ---其他异常进行执行,任何错误的捕获 end; 结束,必须有分号 set serveroutput on; 执行了这一句才能看到输出结果 dbms_output.put_line('要打印的字符') --不能打印布尔类型 变量声明: declare 1 binary_integer 整数,主要用来计数,效率很高 2 number 整数 小数 3 char 4 varchar2 5 date 6 long 7 boolean 可以true 可以false 也可以null,建议使用时一定要给个初始值,否则为null %type 获取某字段/变量的属性 复合类型 table: 相当于java中的数组 type[说明一种新的类型]类型名is table of某表的一列%typeindex by binary_integer[下标使用binary_integer 下标可以是负数] table定义变量:变量名类型名 record: 相当于java中的class typeis record ( 字段名变量基本类型 ); record定义变量:类型名 record使用:变量名.字段名:= 值 --使用%rowtype声明record变量 declare 变量名 某表%rowtype --此时的该变量就是一个record类型,它的列就是这个表所有的列 --PL/SQL语言的语句运用 1、select必须返回一条记录,并且只能返回一条记录,如果不用游标,就必须用into 给某变量 select某列,某列into变量名,变量名 from 表名 select的一种用法: 先用%rowtype声明一个record类型的变量AT表%rowtype 然后 select*intoAfrom T表; --就可以将该表中所有字段的值放到A里 sql%rowcount --刚刚执行的sql语句被影响了多少行 --PL/SQL语言的DDL begin execute immediate'create table T ......' --外层有单引号如果语句中有单引号,改为双引号 end; --PL/SQL语言的分支 if (...) then elsif (...) then ...; --elsif elsif的else没有"e"要注意 else ...; end if; --PL/SQL语言的循环 loop end loop; forkin1...10loop end loop; reverseloop--逆序 whilej<10loop ...; j:=j+1; end loop; --PL/SQL错误处理 exception when某类异常[异常名,oracle中已经定义了一些异常类型]then ........; when others then --其他异常类型没有捕获到的,这里全部捕获 ........; end; *游标(重点) select 返回的是一个结果集,游标是在这个结果集上方的一个指针,游标和迭代器差不多。 游标的定义: declarecursor游标名is --声明一个游标 select * from 表名; --这个游标就会指在这个结果集的脑袋上 声明record类型变量游标名%rowtype; --可以存一条游标指向结果集的一条记录 begin open游标名; --打开游标,打开时plsql才会真正的执行这条select语句 loop --遍历游标 fetch游标名intorecord类型变量; --从游标中拿出一条记录,放到(into)这个record变量中去,fetch后,游标自动往下移一条记录; exit when(notfound) --判断什么时候结束,如果fetch指到尾部还fetch,指针一直在尾部 dbms_output.put_line(游标名.字段名); close游标名; --最后用完游标记得把游标给关闭掉 end loop; while 循环写法: declarecursor游标名is --声明一个游标 select * from 表名; --这个游标就会指在这个结果集的脑袋上 声明record类型变量游标名%rowtype; --可以存一条游标指向结果集的一条记录 begin open游标名; --打开游标,打开时plsql才会真正的执行这条select语句 fetch游标名intorecord类型变量; --从游标中拿出一条记录,放到(into)这个record变量中去,fetch后,游标自动往下移一条记录; while (游标名%found) loop dbms_output.put_line(游标名.字段名); fetch游标名intorecord类型变量; end loop; close游标名; --最后用完游标记得把游标给关闭掉 for循环的写法 declare cursor 游标名is select * from 表名; begin for record变量名 in 游标名 loop --用for循环cursor不用open,他会帮你打开,也不需要fetch,for自动帮你fetch;record变量也不需要声明 dbms_output.put_line(record变量名.表的字段名); end loop; --cursor也不需要关闭,for自动帮你关闭 end; 所以for循环是最简单的循环,也不需要判断cursor是否结束。不容易出错 游标四属性: 1、isopen 2、notfound 最近的一条fetch语句没有返回记录 3、found 找着记录了,返回true 4、rowcount 当前返回的总数是多少 带参数的游标 declare cursor 游标名(参数1,参数2 ...) is select 列1,列2 ... from 表名 where 某列1=参数1 and 某列2=参数2; 例子: declare cursor c(v_deptno emp.deptno%type,v_job emp.job%type) -- 参数1 emp表的deptno列类型 参数2 emp表的job列类型 可更新的游标(update ) 例: declare cursor c is select * from emp2for update; begin for v_temp iscloop if(v_temp.sal<2000) then update emp2 set sal = sal *2 wherecurrent ofc; --在当前游标位置更新 elsif (v_temp.sal =6000) then --等于号,赋值时是 := delete from emp2 wherecurrent ofc; end if; end loop; commit; end; 存储过程 带有名字的PL/SQL程序块 除了create or replace procedure 存储过程名 is替代了 declare 之外,其他语句与PL/SQL的写法一模一样 执行 存储过程: exec 存储过程名 或者: begin 存储过程名; end; / 带参数的存储过程 in 传入参数 只能传入,不能用 out 传出参数 可以运算赋值传出 create or replace procedure 存储过程名 (参数1 in 类型,参数2 类型,参数3 out 类型,参数4 in out 类型) -- in 默认in out 既传入也传出:传入同时可以但与运算传出 is 函数 create or replace function 函数名 (参数1 类型,参数2 类型) return 类型 is begin ... ... end; 触发器 create or replace trigger 触发器名 数据库设计三范式 范式:数据库的一个规则,减少冗余 三范式的规则:不存在冗余数据 第一范式:1 任何表都要有主键 2 列不可分 第二范式:多对多表设计所要遵循的原则:当一张表里有多个字段作为主键,非主键不能依赖于部分主键,即:不能存在部分依赖 第三范式: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |