zoukankan      html  css  js  c++  java
  • 马士兵大哥数据库教程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;



         






  • 相关阅读:
    1101. Quick Sort (25)
    1100. Mars Numbers (20)
    1099. Build A Binary Search Tree (30)
    TCP四次挥手为何需要TIME_WAIT以及为何是2MSL?
    关于priority_queue运算符重载的问题
    leetcode151.翻转字符串里的单词
    华为笔试题--最长公共子串
    华为笔试题--表达式求值
    华为笔试题--字符串合并处理
    华为笔试题--删除字符串中出现次数最少的字符
  • 原文地址:https://www.cnblogs.com/hijushen/p/4229700.html
Copyright © 2011-2022 走看看