oracle知识点梳理

------------------------------------
常用的数据字典及用途:


USER_ARGUMENTS 过程和函数的参数信息
USER_DEPENDENCIES 对象的依赖关系(存储过程中用到哪些表)
user_errors 对象(过程等)的编译错误信息
user_objects 拥有的对象
user_object_size 对象大小
user_source 源代码
user_tables 表信息(数据量)
user_tab_privs表权限信息
user_tab_columns表结构信息
v$database 查看数据库信息


-------------------------------------
 表分析语句的作用
  EXECUTE IMMEDIATE 'ANALYZE TABLE T_R_CIRC_TMP_TMFFNMOVEMENT_A COMPUTE STATISTICS'


 analyze table my_table compute statistics;  
 analyze table my_table compute statistics for table for all indexes for all columns;   
 analyze table my_table compute statistics for table for all indexes for all indexed columns;  
--查看表信息
select table_name,num_rows,blocks,empty_blocks from user_tables;
--查看字段信息
select table_name,column_name,num_distinct,low_value,high_value,density from user_tab_columns t where t.TABLE_NAME='T_R_CIRC_LCBNF';
--查看索引信息
select table_name,index_name,blevel,leaf_blocks,distinct_keys,
        avg_leaf_blocks_per_key avg_leaf_blocks,avg_data_blocks_per_key avg_data_blocks,clustering_factor,num_rows
from user_indexes t where t.TABLE_NAME='T_R_CIRC_LCBNF';
--truncate命令不会修改数据的统计信息,
--也就是如果我们想让CBO利用合理利用数据的统计信息的时候,需要我们及时的使用analyze命令或者dbms_stats重新统计数据的统计信息
------------------------------------------
--自动收集统计信息的时间
select t1.window_name, t1.repeat_interval, t1.duration
  from dba_scheduler_windows t1, dba_scheduler_wingroup_members t2
 where t1.window_name = t2.window_name
   and t2.window_group_name in
       ('MAINTENANCE_WINDOW_GROUP', 'BSLN_MAINTAIN_STATS_SCHED');


-----------------------------------------------------------------------------------
PRAGMA关键字
PRAGMA AUTONOMOUS_TRANSACTION ;--自治事务,不影响主事务或外层事务
PRAGMA EXCEPTION_INIT;--将异常错误号和异常标识符关联起来
----------------------------
事务管理
一个事务是由前一个COMMIT或者ROLLBACK(或者随着会话的启动)之后的第一个SQL语句隐式启动的,或者在一个ROLLBACK TO SAVEPOINT之后继续
事务管理语句:COMMIT/ ROLLBACK / SAVEPOINT /ROLLBACK TO SAVEPOINT/SET TRANSACTION/LOCK TABLE 
SET TRANSACTION 命令:
SET TRANSACTION READ ONLY;把当前驶入定义为只读的,在一个只读事务中,后续的查询看到的只是在事务开始之前提交的变化(适合运行时间长,多个查询组成的报表)
SET TRANSACTION READ WRITE;缺省默认设置
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE|READ COMMITTED; 可以指定这两个隔离级别,如果指定SERIALIZABLE(脏读),如果DML语句要修改的表已经被另一个尚未提交的事务修改了,这个DML语句就会失败
                                                            如果指定的是READ COMMITED,如果一个DML语句请求的行级锁已经被另一个事务持有,这个DML语句要一直等待锁被释放,这也是DML语句的缺省行为
                                                            
自治事务 PRAGMA AUTONOMOUS_TRANSACTION (日志机制中常用)
如果需要开启显示事务,就通过savepoint sp_begintran开启(??)
------------------
异常
声明异常 INVALID_COMPANY_ID EXCEPTION 
名称和错误代码关联 PRAGMA EXCEPTION_INIT(INVALID_COMPANY_ID ,-1843)
抛出异常 RAISE INVALID_COMPANY_ID;
RAISE_APPLICATION_ERROE(-20000,'describe......');
示例:
DECLARE
  v_comm emp.comm%TYPE;
BEGIN
  SELECT comm INTO v_comm FROM emp
  WHERE empno = &eno;
  IF v_comm IS NULL THEN
    RAISE_APPLICATION_ERROR(-20000,'该雇员无补助');
  END IF;
  EXCEPTION
    WHEN NO_DATA_FOUND THEN
      dbms_output.put_line('该雇员不存在');


处理抛出异常  WHEN INVALID_COMPANY_ID  THEN
SQLCODE
SQLERRM
预定义异常
非预定义异常
自定义异常
------------------------------------
游标:
声明 打开 提取 关闭
游标变量 REF CURSOR  
声明:type v_curtype is ref dursor return company%type;
      v_cur  v_curtype
打开: open v_cur for  select * from 


-----------
动态SQL
EXCUTE IMMEDIATE
OPEN FOR USING :
OPEN V_CUR FOR select * from  ... USING ...


-----------
触发器
create or replace trigger tri_test
after insert or update
on v_table
for each row
  when (old   new)
begin
  :old    :new
end;
----------------
type: as object  is record
create type 变量 as object(


字段1 类型1,


字段2 类型2


);


--------------------------


与 type 变量 is table of 类型


--


type 变量 is record(


字段1 类型1,


字段2 类型2


);


------
执行计划
查看方法:
explain plan for 命令(相当于F5) :
   explain plan for + SQL语句 
   select * from table(dbms_xplan.display)
dbms_xplan 包查看 :
   select * from table(dbms_xplan.display) 
   select * from table(dbms_xplan.display_cursor(null,null,’advanced’)); 
   select * from table(dbms_xplan.display_cursor(‘sql_id/hash_value’,child_cursor_number,’advanced’)) 
   select * from table(dbms_xplan.display_awr(‘sql_id’))


sqlplus 中使用 set autotrace 
10046事件 
10053事件 
awr报告 
  执行计划:


------
分区表
范围分区(range)(日期)
列表分区(list)(值)
散列分区(哈希分区)(hash)
范围-哈希复合分区(range-hash)
范围-列表复合分区(range-list)




1,写一段SQL删除表的重复记录
delete from jolie_1 a
 where rowid in
       (select max(rd) rd
          from (select t.transactionno,
                       t.policyno,
                       t.productno,
                       t.insuredno,
                       rowid as rd
                  from jolie_1 t) t
         group by t.transactionno, t.policyno, t.productno, t.insuredno);


2,delete tablea 与truncate tablea的区别     
truncate全表删除,DDL,隐式提交,速度快,DELETE DML 行级删除  可回滚
truncate 不会修改数据的统计信息
truncate 的表数据不能flashback
truncate 的数据不能触发delete触发器 


3.数据库索引
B树索引:从上到下查询(根到叶子),每个结点存放的是结点块中的最小的值和rowid。要占用一定的硬盘和内存空间,如果更新表中索引字段就要同时花额外的时间更新索引,
         建立索引时一定要在“加快查询速度”与“降低修改速度”之间做好平衡
         原则:大表(如果数据量太大可以考虑将索引分区),查询数据量大而不是更新数据量大,经常作为过滤条件(where)或group by order by  join 条件的字段,
         null的记录不走索引(在有null值得列上建索引不合理),一个表上不要建太多的索引,数据库系统通常会默认在PRIMARY KEY(主键)的列上创建索引
         索引不一定就一定会节省时间,例如查询的数据量比较大(20%以上)就没有必要走索引(CBO)
位图索引:主要是针对大量相同值的列而创建,采用布尔型的值,对列的基数形成向量,例如性别,形成两个向量,男向量和女向量,列中的值男向量(true为1,false为0)
反向索引:
B树聚集索引:
HASH聚集索引:
索引失效原因:索引列上使用函数,is null,统计数据不真实(analyze),对索引列进行运算(+-*/),隐式转换(例如字符型数据没有加引号)
错误的例子:select * from test where id-1=9; 
正确的例子:select * from test where id=10; 
like '%  '  %在前(有待考证,并不绝对)?
not in / not exists
-------------------------
函数:
function fun_test_on(name_in in varchar2) return varchar2 
  is
  return_value varchar2(100);
  begin
    return return_value;
  end;
存储过程:
procedure pro_test_one(v_id in number,v_name out varchar2) 
  is
 
  begin
    select name into v_name from test where id=v_id;
  end;


PLSQL中调用存储过程和函数时形参和实参的关联方法:位置表示法和命名表示法。
如果是混合表示法,必须把位置表示法的参数放在名称表示法的前面。
1.位置表示法:procedure pro_test(v_no varchar2,v_name varchar2) as ...
调用方法:
begin
  pro_test('1','liu');
end;
2.命名表示法:
begin
  pro_test(v_no =>'1',v_name => 'liu');
end;


对于具有out和缺省值的存过的调用方法:out 和 in out类型的参数要用变量来接收
procedure pro_test_two(
  v_budget in number,
  v_contribution in out number,
  v_date  in date default sysdate,
  v_bonus out number,
  v_corners in varchar2 default 'WHENEVER POSSIBLE'
  );
  
  1>. 位置法,全部实参
  declare
    l_payoff  number;
    l_dollars number := 10000;
  begin
    pro_test_two(50000, l_dollars, sysdate + 20, l_payoff, 'PAY OFF OSHA');
  end;


 2>.位置法,最少实参
 
   declare
    l_payoff  number;
    l_dollars number := 10000;
  begin
    pro_test_two(50000, l_dollars, sysdate + 20, l_payoff);
  end;
  
  3>.命名法,跳过缺省值
  declare
    l_payoff  number;
    l_dollars number := 10000;
  begin
    pro_test_two(v_budget=>50000, l_dollars, v_bonus=> l_payoff);
  end;
 4>.混合法
 declare
    l_payoff  number;
    l_dollars number := 10000;
  begin
    pro_test_two(50000, v_contribution=>l_dollars,v_date=>SYSDATE, v_bonus=> l_payoff);
  end;
  
  缺省值:
  缺省值的赋值可以使用default关键字,也可以赋值操作符 :=
  procedure pro_test_three(sign_in in varchar2 :='la', born_at in date default sysdate);
  
  
  局部模块:剥离重复代码,改善可读性;
  声明局部模块的位置必须放在PLSQL代码块中的声明单元内的所有的声明语句之后。
  局部模块只能在定义了它的块的内部调用







java 主要知识点 udf和utf
nginx(数据采集工具)->flume(日志收集)->kafka(消息队列)
sublimerge文本编辑器

猜你喜欢

转载自blog.csdn.net/naomi_qing/article/details/80929723