马士兵大哥数据库教程2阶段

马士兵大哥数据库教程2阶段
user_indexes;user_tables;user_views;用户字典表dictionary
select user_tables user_views;user_indexes 
视图view;create view v$_stu as select ,,, from .
建立视图要付出维护上的代价。
序列sequence,Oracle独有的东西;
create sequence seq;SELECT SEQ.NEXTVAL FORM DUAL;
数据库三范式:只是一种规范,该打破就打破。cilver Bullet 银弹,没有完美的解决方案。
第一范式:1,要有主键;2,列不可分。减少数据冗余。
第二范式:多对多表关系设定:1,不存在部分依赖;如果有多个主键,之间不能有依赖关系。即其他信息不能 部分依赖主键。
第三范式:不存在传递函数依赖。即每个非关键字都独立于其他非关键字列,并依赖于关键字。
PL/SQL的Oracle内部编程语言
T-SQL是SQ-Server 的编程语言
例如存储过程:
最简单的存储过程:begin dbms_output.put_line('HelloWorld!');end;
启动:set serveroutput on;  再执行一次上面,就会有输出。
Oracle常见7中数据类型:
1,binary_integer:整数,主要用来计数,而不是表示字段类型;例如数组下标哦。
2,number 数字类型;
3,char 定长字符串;
4,varchar 变长字符串;
5,date 日期;
6,long 长字符串,最长2GB;
7,boolean布尔类型;可以取true,false,和NULL值。
declare v_empno number(4);
        v_empno v_empno%type;
复杂数据类型:
1,--table数据类型://数组
declare
     type type_table_emp_empno is table of emp.empno%type index by binary_integer;
     v_empnos type_table_emp_empno
begin 
     v_empnos(0) := 7369;
     v_empnos(2) := 7839;
     v_empnos(-1) := 9999; /* 可存在负数的下标 */
     dbms_output.put_line(v_empnos(-1));
     end;
2,--Record数据类型;//集合、类的概念                         
declare
     type type_record_dept is record
     (
          deptno dept.deptno%type,
          dname dept.dname%type,
          loc dept.loc%type
     );
     v_temp type_record_dept;
3,--使用%rowtype声明record对象
 declare
     v_temp dept%rowtype;//可以直接根据表结构来动态定义。

PL/SQL中的SQL语句:
1,有且只有一条输出记录;
2,例子:select ename,sal into v_ename,v_sal from emp where depno = '';//sql需要配合into使用。
3,Update动作需要commit。
4,dbms_output_put_line(sql%rowcount || '条记录被影响')//sql为关键字,代表刚才执行的sql语句;

PL/SQL中的DDL语句:
begin 
     execute immediate 'create table T (nnn varchar2(20) default ''aaa'')' //2个单引号代表一个单引号,需要加上粉红部分;
end;/

PL/SQL分支和循环
分支:if then ; elsif then ;else ; end if;end;
循环:1) loop ; 累加;exit when 条件; end loop;end;
      2) while 条件; loop ;累加;end loop;end;
      3) for k in 1..10 loop ;end loop; end;//
         for k in reverse 1..10 loop ;end loop;end; --完成了逆序输出循环。其中1..10代表1到10,增强的for循环。

错误处理:
exception
     when 错误1 then      ;
     when others then      ;     常见的2种:too_many_rows     no_data_found  //查手册

完整的例子:
--创建一个errorlog表:
     create table errorlog
     (
     id number primary key,
     errcode number,
     errmsg varchar2(1024),
     errdate date
     );
     create sequence seq_errorlog_id start with 1 increment by 1;
     declare
          v_depno dept.depno%type := 10;
          v_errcode number;
          v_errmsg varchar2(1024);
     begin
          delete from dept where depno = v_deptno;
               commit;
     exception
          when others then
               roolback;
                    v_errcode :=SQLCODE; --SQLCODE为数据库关键字,代表出错代码
                    v_errmsg := SQLERRM; --SQLERRM为数据库关键字,代表出错信息
                    insert_into errorlog values (seq_errorlog_id.nextval,v_errcode,v_errmsg,sysdate);
                         commit;
     end;



     






posted @ 2015-01-16 20:13  hijushen  阅读(597)  评论(0编辑  收藏  举报