oracle学习笔记

启动监听:lsnrctl start/stop


启动服务:
         su oracle
        sqlplus /nolog
        connect /as sysdba
        (启:)startup       (停:)shutdown immediate

oemapp dbastudio 打开企业管理器图形界面

opemapp console 打开企业管理器图形界面(和上面的命令效果一样。)

sqlplus / as sysdba 登陆到本机的数据库

lsnrctl start/stop 打开/关闭端口监听

dbca 添加数据库实例(图形界面)

hostname 查看主机名称

netca 配置监听(图形界面)


1、oracle会话设置默认的日期格式:
alter session set nls_date_format = 'yyyy-mm-dd';

2、返回当前会话的数据库时区:
select sessiontimezone from dual;

3、查询数据库时区:
select dbtimezone from dual;

4、查看会话时区中的当前日期:
select current_date from dual;

5、获取时区的时差:
select tz_offset('pst') from dual;  --'pst' 表示太洋标准时间

6、子查询中不能包含 ORDER BY 子句



查看数据库相关的文件:
select name from v$datafile;
select name from v$logfile;
select name from v$controlfile;

数据库:就是保存数据的物理文件
数据库实例:就是oracle的进程和内存
可以从多个实例访问一个数据库,但是一个实例一次只能访问一个数据库。也就是一个实例的一生只能装载并打开一个数据库。


1、数据操作语言(DML):INSERT,UPDATE,DELETE  需要提交
2、数据定义语言(DDL):CREATE,ALTER,DROP,RENAME,TRUNCATE  会自动提交
3、事务控制(TC):COMMIT,ROLLBACK,SAVEPOINT
4、数据控制语言(DCL):GRANT(授权),REVOKE(防止其它用户访问数据库)

5、oracle左外链接:
select p.name,pt.name from products p,product_types pt where p.product_type_id = p.product_type_id (+) order by p.name;
   等同于:
   select p.name,pt.name form products p,product_types pt left join on p.product_type_id = p.product_type_id order by p.name;
   oracle右外链接:
   select p.name,pt.name from products p,product_types pt where p.product_type_id (+)= p.product_type_id order by p.name;
   等同于:
   select p.name,pt.name form products p,product_types pt right join on p.product_type_id = p.product_type_id order by p.name;
6、查看表的描述: describe 表名
7、oracle会话设置默认的日期格式: alter session set nls_date_format = 'yyyy-mm-dd';
8、创建用户:create user jason identified by siven;
create user jason identified by siven default tablespace users temporary tablespace temp;
   授权:grant create session to jason;
   修改用户密码:alter user jason identified by siven1;   PASSWORD命令可以修改当前用户的口令;
   删除用户:drop user jason;
9、系统特权:
   CREATE SESSION:连接到数据库
   CREATE SEQUENCE:
   CREATE TABLE;
   CREATE ANY TABLE:在任何模式中创建表
   DROP ANY TABLE;
   CREATE PROCEDURE;
   EXCUTE ANY PROCEDURE:执行任何模式中的存储过程
   CREATE USER;
   CREATE VIEW;
10、授权:GRANT CREATE SESSION,CREATE USER,CREATE TABLE TO steve;
    加上WITH ADMIN OPTION选项用户就可以该权限再授于其它用户:
          GRANT EXCUTE ANY PROCEDURE TO steve WITH ADMIN OPTION;
    将一种特权授于PUBLIC,这样,系统中的所有用户都具备这种特权了:
          GRANT EXECUTE ANY PROCEDURE TO PUBLIC;
    查询用户的系统特权:select * from USER_SYS_PRIVS order by privilege;
    撤消用户的系统特权:REVOKE CREATE SESSION,CREATE TABLE FROM steve;


11、对象特权:SELECT,INSERT,UPDATE,DELETE,EXECUTE(执行存储过程)
    查询用户已有的对象特权:select * from USER_TAB_PRIVS_MADE WHERE TABLENAME = 'employee';
    撤消用户对象特权:REVOKE SELECT,INSERT ON employee FROM steve;
12、检查用户的角色:select * from USER_ROLE_PRIVS;
    查询角色授于的系统特权:SELECT ROLE_SYS_PRIVS ORDER BY PRIVILEGE;
    查询角色授于的对象特权:SELECT ROLE_TAB_PRIVS ORDER BY TABLE_NAME;
13、索引:
    基本准则:当任何单个查询要检索的行小于或者等于整个表行数的10%时,索引就非常有用。
    如果使用基于函数的索引,DBA必须将初始化参数QUERY_REWRITE_ENABLED设置为true(默认为false):
    connect system/manager
    alter system set QUERY_REWRITE_ENABLED = true;
    查询用户所建的索引:select * from user_indexes;
    rename to 更改索引名称
14、游标:
    14.1、loop循环检索游标中的记录
    declare
       v_ruletype t_hosttype_rule.ruletype%type;
       v_hosttypeid t_hosttype_rule.hosttypeid%type;
       cursor v_t_hosttype_rule is
              select ruletype,hosttypeid from t_hosttype_rule;
       begin
            open v_t_hosttype_rule;
            loop
                fetch v_t_hosttype_rule into v_ruletype,v_hosttypeid;
                exit when v_t_hosttype_rule%notfound;
                Dbms_Output.put_line(v_ruletype || '======' || v_hosttypeid);
            end loop;
            close v_t_hosttype_rule;
       end;
   14.2、for循环检索游标中的记录,for循环可以不显示打开关闭游标,它会自动打开和关闭游标
      declare
       cursor v_t_hosttype_rule is
              select ruletype,hosttypeid from t_hosttype_rule;
       begin
           for v_rule in v_t_hosttype_rule loop
                Dbms_Output.put_line(v_rule.ruletype || '======' || v_rule.hosttypeid);
            end loop;
       end;
   14.3、open-for:可以在游标中检索自己想要的记录,REF CURSOR是一个指向游标的指针
   declare
       TYPE t_rule_cursor is ref cursor return t_hosttype_rule%rowtype;   --声明了一个 ref cursor类型,并命名为t_rule_cursor
       v_t_rule t_rule_cursor;
       v_rule t_hosttype_rule%rowtype;
       begin
            open v_t_rule for
            select * from t_hosttype_rule where ruletype = 'login';
            loop
                fetch v_t_rule into v_rule;
                exit when v_t_rule%notfound;
                Dbms_Output.put_line(v_rule.ruletype || '======' || v_rule.hosttypeid);
            end loop;
            close t_rule_cursor;
       end;
15、异常:iteye已收藏   
    OTHERS 异常可处理所有的异常,即不知道将会发生什么异常时可以OTHERS异常
    begin
     dbms_output.put_line(1/0);
     exception
         when zero_divide then
              dbms_output.put_line('除数为0');
         when others then
              dbms_output.put_line('除数为0======');
    end;


16、存储过程:略
17、触发器:
    查询用户的所有触发器:select * from user_tiggers;
    禁止和启用触发器:
    alter trigger triggerName disable;
    alter trigger triggerName enable;
18、数据库对象:
    --创建一个数据库对象
create type t_address as object
(
street varchar2(30),
city varchar2(30),
state char(2),
zip varchar2(5)
);

--在对象中引用对象
create type t_person as object
(
id integer,
first_name varchar(30),
last_name varchar2(30),
dob date,
phone varchar2(12),
address t_address
);

--给对象添加函数
create type t_product as object
(
id integer,
name varchar2(30),
description varchar2(30),
price number(5,2),
days_valid integer,
--get_sell_by_date() returns the date by which the product must be sold
member function get_sell_by_date return date
);

--对象函数的函数体
create type body t_product as
--get_sell_by_date() returns the date by which the product must be sold
member function get_sell_by_date return date is
v_sell_by_date date;
begin
     select days_valid + sysdate into v_sell_by_date from dual;
     return v_sell_by_date;
end;

--创建表并引用对象类型
create table products
(
product t_product,
quantity_in_stock integer
);

--向表中插入数据
insert into products (product,quantity_in_stock) values (t_product(1,'pasta','20 oz bag of pasta',3.95,10),50);

select * from products;

--创建对象并自定义松造函数
create type t_person2 as object
(
id integer,
first_name varchar2(30),
last_name varchar2(30),
dob date,
phone varchar2(12),
CONSTRUCTOR FUNCTION t_person2
(
p_id integer,
p_first_name varchar2(30),
p_last_name varchar2(30),
) RETURN SELF AS RESULT,
CONSTRUCTOR FUNCTION t_person2
(
p_id integer,
p_first_name varchar2(30),
p_last_name varchar2(30),
p_dob date
) RETURN SELF AS RESULT
);

你可能感兴趣的:(oracle学习)