oracle学习笔记

1、ORACLE的安装
   a>、ORACLE的版本
   8i,9i :   i是internet
   10g,11g : grid (网格)
   12c : cloud (云计算)
  
   b>、10g不支持win7
  
   c>、安装路径中不能有中文,空格或其它特殊字符
  
   d>、几个账号
       sys   : change_on_install  : 数据库的拥有者
   system : manager   : 数据库管理员   
       scott : tiger
   hr : hr
       其它: oracle
   e>、管理地址
       Enterprise Manager Database Control URL - (sxt) :
        http://USER-20140724TC:1158/em
        数据库配置文件已经安装到 D:\oracle\product\10.2.0,同时其他选定的安装组件也已经安装到 D:\oracle\product\10.2.0\db_1。
       iSQL*Plus URL 为:http://USER-20140724TC:5560/isqlplus
       iSQL*Plus DBA URL 为:http://USER-20140724TC:5560/isqlplus/dba

    f>、使用ORACLE必须启动的两个服务
     aa>、OracleServiceSXT
bb>、OracleOraDb10g_home1TNSListener
  
  
    g>、使用ORACLE
     aa>、sqlplus scott/tiger
bb>、sqlplusw scott/tiger
cc>、iSqlPlus

h>、在oracle中所有的数据库对象都属于一个特定的用户(schema),一个用户要访问另一个用户的对象,必须指定用户名
         如:system用户要查询scott的dept表,应写为: select * from scott.dept;

  
   2>、
       OCA : 3
   OCP  : 10
   OCM
  
   3>、数据库对象
       a>、表
   b>、视图
   c>、索引
   d>、存储过程
   e>、函数
   f>、触发器
   g>、序列
   h>、同义词
   i>、包
  
  
    4>、scott账号下的表
     dept (部门表)
   deptno : 部门编号
   dname : 部门名称
   loc : 部门位置
  
emp (员工表)
    empno : 员工编号
ename : 员工姓名
job : 工作岗位
mgr : 上级的员工中
hiredate : 雇佣日期
sal : 工资
comm : 奖金
deptno : 部门编号

salgrade (工资等级表)
   grade : 工资等级
   losal : 该等级的最低多次
   hisal : 该等级的最高工资

5>、SQL
    a>:DML(Data Manipulation Language,数据操作语言)  : select ,update,delete,insert
b>、DDL(Data Definition Language,数据定义语言)    : crate ,alter , drop ,truncate table
c>、DCL(Data Control Lanaguage,数据控制语言)      : grant , revoke

6>、创建表
    crate table_name (col_name col_type [约束])
a>char,varchar将别
b>、oracle的数据类型: char,varchar2,number,date

     create table t_stud(s_id number(8),s_name varchar2(30),in_date date);
create table t_stud2(s_id integer,s_name varchar(30),in_date date);
create table d1 as select * from dept where 1 = 2;
create table e1 as select empno,ename,job,sal from emp where sal > 1000;

        
c>、约束(5种)
   aa>、主键约束    = unique + not null
   bb>、外键约束
   cc>、非空约束 not null
   dd>、检查约束 check
   ee>、唯一性约束  unique
  
   create table t_emp (
     empno number(10) primary key,
ename varchar2(30) unique,
job varchar2(20) not null,
sal number(8,2) check(sal > 0),
deptno number(5) references dept(deptno)
)
   
7>、数据操作
        a>、转换函数
            to_char(); select empno,ename,job,to_char(hiredate,'yyyy-mm-dd hh24:mi:ss'),sal from t_emp
            to_date(); 字符串转日期
       
b>、delete from emp 与 truncate table emp差别
     aa>、delete : 逐行删除,truncate先摧毁表再重建
bb>、delete是dml语句,可以被回滚,truncate是ddl语句,不可以被回滚
cc>、delete语句不释放空间,truncate释放空间
dd>、delete会产生碎片,truncate不会

c>、
    在ORACLE中,查询语句必须包含from tableName
    获取当前时间: select  sysdate from dual;


8>、查询:
         a>、基本查询
         b>、排序和过滤数据
         c>、单行函数
   
         d>、多行函数
      count,sum,avg,max,min  
  where : 在分组之间过滤数据,不能使用组函数
  having : 在分组之后过滤数据
         e>、连接查询
      等值连接
  from emp e ,dept d where e.deptno = d.deptno;
  from emp e inner join dept d on e.deptno = d.deptno;
  不等值连接
  from emp ,salgrade where sal between losal and hisal
  from emp join salgrade on sal between losal and hisal
 
  左外连接[左表emp数据必须全部出现]
     from emp e left outer join dept d on e.deptno = d.deptno
     from emp e left       join dept d on e.deptno = d.deptno
from emp e,dept d where e.deptno = d.deptno(+)
  右外连接
     from emp e right outer join dept d on e.deptno = d.deptno
     from emp e right       join dept d on e.deptno = d.deptno
from emp e,dept d where e.deptno(+) = d.deptno
  全外连接
     from emp e full outer join dept d on e.deptno = d.deptno;
     from emp e full       join dept d on e.deptno = d.deptno;

  自连接
   from emp e,emp m where e.mgr = m.empno;
   from emp e join emp m on e.mgr= m.empno;
    
         f>、子查询
              select型子查询
 
      from型子查询
 
  where型子查询
 
  exists/相关子查询
 
 
9>、体系结构
        a>、ORACLE服务器由实例和数据库组成
    aa>、ORACLE是通过实例来操作数据文件的
    bb>数据库由数据文件,日志文件和控制文件构成
cc>、实例是由SGA(系统全局区)和后台进程构成
dd>、创建表空间

    10>、使用ORACLE开发项目的流程
          a>、为该项目创建一个表空间
              create tablespace dogspace datafile 'c:/data01.dbf' size 100m uniform size 1m;
          b>、为该项目创建一个用户
              create user dog identified by wangwang default tablespace dogspace;
          c>、为该用户授权: 开发用户只要有两个角色:connect,resource
              grant connt,resource to dog;
  d>、使用dog登录数据库执行数据库操作
 
 
11>、PL/SQL编程
     a>、PL/SQL基于PASCAL语言
b>、一个程序的基本语法 : 变量,数据类型,运算符,流程控制(顺序结构,选择结构,循环结构),函数
c>、一个PL/SQL程序的语法结构
     declare
    变量声明
begin
    程序逻辑
     exception
    异常处理
end

d>、输出: (打开服务器端输出: set serveroutput on)
      dbms_outout.put() : 不换行,最后必须调用put_line(),否则输出看不到
  dbms_output.put_line(); 自动换行
         e>、 所有变量与关键字不区分大小写

f>、语名以分号结尾
g>、注释分为单行注释--与块注释 /* */
h>、字符串用单引号引起来,字符串连接符为||
         i>、赋值运符为 := , 比较两个值是否相等用 =
         j>、可以在PL/SQL中直接调用SQL函数
k>、逻辑运算为:not and or
l>、求余符号为mod : 17 mod 5
m>、%type,%rowtype

12>、游标(处理多行查询)
     1>、处理多记录查询
2>、使用过程
     a>、声明游标及存储每行记录的变量
     cursor dept_cur is select * from dept;
rec_dept dept.%rowtype;
b>、打开游标
                  open dept_cur;
             c>、提取游标每行数据(循环)
                  fetch dept_cur into rec_dept;
             d>、关闭游标
                  close dept_cur;
13>、查询部门的所有数据
declare
  cursor dept_cur is select * from dept;
  dept_rec dept%rowtype; --存储每行数据的变量
begin
  open dept_cur;
  /*
游标的属性
%notfound : 没有提取到数据
%found : 提取到了数据
%rowcount : 查询的总记录
%isopen : 游标是否是打开的
   */
  loop
fetch dept_cur into dept_rec;
exit when dept_cur%notfound;
dbms_output.put_line(dept_rec.deptno || '   ' || dept_rec.dname || '   ' || dept_rec.loc);
  end loop;
  close dept_cur;
end;
 
     14>、存储过程
          create [or replace ] procedure 过程名称 (参数1 [in/out/inout] 参数类型,..)
  is/as
     --变量声明
  begin
     --PL/SQL程序
  exception
     --异常处理
  end;
15>、函数
      create or replace function 函数名称 (参数1 参数类型)  return 返回值类型
  is/as
    --变量声明
  begin
    --PL/SQL程序
  exception
     --异常处理
  end;

16>、包(package)
       a>、将一组相关的存储过程,函数,数据类型等封装起来,以便于管理和使用
   b>、声明包头(接口)
      create or replace package emp_pkg
  is
    procedure  sayHello;
procedure showEmpInfo(eno emp.empno%type);
function  getEmpIncome(eno emp.empno%type) return number;
  end;  
  
   b>、实现包体
      create or replace package body emp_pkg
  is
    procedure sayHello
                as
                begin
                   dbms_output.put_line('Hello World');
                end;
               
                procedure showEmpInfo(eno emp.empno%type)
                  is
                    emp_rec emp%rowtype;
                  begin
                     select * into emp_rec from emp where empno=eno;
                     dbms_output.put_line('姓名:' || emp_rec.ename || ', 工作岗位:' || emp_rec.job ||', 工资:' || emp_rec.sal );
                  exception
                     when no_data_found then
                         dbms_output.put_line('员工不存在!');
                  end;

                function getEmpIncome(eno emp.empno%type) return number
is
  total number(8,2);
begin
   select sal * 12 + nvl(comm,0) into total from emp where empno=eno;

   return total;
end;  
    end ;

17>、触发器
      a>、触发器是当特定的操作(insert,update,delete)发生时,自动执行的一段PL/SQL代码
  b>、触发器不能被程序显式调用
  c>、
     create or replace trigger 触发器名
before/after [insert,update,delete]  --触发时机
on 表名
[for each row] -- 行级触发器,没有为语句级触发器
begin
    --PL/SQL代码
end;

     18>、数据的导入导出 (exp,imp)
      1>、导出指定用户的指定表
       exp scott/tiger file=c:/tables.dmp log=c:/log.log tables=emp,dept
          2>、导出指定用户下的所有对象
       exp scott/tiger file=c:/tables.dmp log=c:/log.log
  3>、导出整个数据库(需管理员权限)
       exp system/manager file=c:/full.dmp log=c:/log.log full=y
  
  4>、导入指定表
              imp scott/tiger file=c:/tables.dmp log=c:/log.log tables=emp,dept commit=y ignore=y
  5>、导入指定用户的所有对象
              imp scott/tiger file=c:/scott.dmp log=c:/log.log  commit=y ignore=y  

  6>、将scott的数据导入到另一账号(dog)下
      imp system/manager file=c:/scott.dmp log=c:/log.log  commit=y ignore=y fromuser=scott touser=dog
 
  7>、导入整个数据库(需要管理员权限)
    imp system/manager file=c:/full.dmp log=c:/log.log full=y commit=y ignore=y
19>、使用JDBC访问ORACLE


           

  



  

你可能感兴趣的:(oracle)