`

Oracle 学习整理(一)

 
阅读更多

 

--存储过程练习 01
CREATE OR REPLACE PROCEDURE TEST_XJT(X OUT VARCHAR2,
                                     Y OUT VARCHAR2,
                                     Z OUT VARCHAR2,
                                     S IN VARCHAR2) IS

  TYPE listtest IS TABLE OF TEST2%ROWTYPE;
  V_TM_NEXT_WEIGHT_PRICE listtest := listtest();

  sss        TEST2%ROWTYPE;
  sql_string varchar2(30000);
  STR_SQL    VARCHAR2(200);

BEGIN

  SELECT T.* BULK COLLECT INTO V_TM_NEXT_WEIGHT_PRICE FROM TEST2 T;

  FOR I IN V_TM_NEXT_WEIGHT_PRICE.FIRST .. V_TM_NEXT_WEIGHT_PRICE.LAST LOOP
    DBMS_OUTPUT.put_line(V_TM_NEXT_WEIGHT_PRICE(I).CT1);
    -- fetch V_TM_NEXT_WEIGHT_PRICE
  --  INTO sss;
  END LOOP;

  FOR I IN 1 .. 3 LOOP
    DBMS_OUTPUT.put_line(V_TM_NEXT_WEIGHT_PRICE(I).CT1);
  END LOOP;

  sql_string := 'UPDATE TEST T SET T.A1=1 WHERE T.A2 = :a';
  EXECUTE IMMEDIATE sql_string
    USING TO_CHAR(NULL);

  --STR_SQL := 'SELECT * FROM TT_BIL_SFBANK_CZ_COST T WHERE T.EMP_CODE = :S';
  STR_SQL := 'UPDATE TEST T SET T.A1 = :S WHERE T.A3 = :D';
  EXECUTE IMMEDIATE STR_SQL
    USING SYSDATE, '20000';

  X := '1';
  Y := '2';
  Z := '3';

  INSERT INTO TEST
    (A1, A2, A3)
    SELECT C1,
           C2,
           (SELECT T1.DEPT_CODE
              FROM (SELECT T.*,
                           ROW_NUMBER() OVER(PARTITION BY T.EMP_CODE ORDER BY T.CREATED_TM DESC) ROWNO
                      FROM TM_EMPLOYEE T
                     WHERE T.VALID_FLG = 1) T1
             WHERE T1.ROWNO = 1
               AND T1.EMP_CODE = K3.C1) A3
      FROM (SELECT J.*,
                   ROW_NUMBER() OVER(PARTITION BY J.C2, J.C3 ORDER BY J.C1) ROWNO
              FROM TEST1 J
             WHERE J.C1 = 1
               AND NOT EXISTS (SELECT 1
                      FROM TT_BANK_COST T
                     WHERE J.C2 = T.EMP_CODE
                       AND J.C3 = T.COST_DT)) K3
     WHERE K3.ROWNO = 1;

/*  SELECT SUM(A3) A3
    FROM (SELECT T.A1, NULL A2, NULL A3
            FROM TEST T
          UNION ALL
          SELECT NULL, T2.CT2, NULL
            FROM TEST2 T2
          UNION ALL
          SELECT NULL, NULL, T1.C3 FROM TEST1 T1);*/
         -- SELECT 1 FROM DUAL CONNECT BY LEVEL <3;
  --提交
  COMMIT;
EXCEPTION
  WHEN OTHERS THEN
    X := SQLERRM;
    Y := SQLCODE;
    Z := SYSDATE;
    DBMS_OUTPUT.put_line(SQLERRM);
    ROLLBACK;
END TEST_XJT;

-- 存储过程练习,过程之间的调用
CREATE OR REPLACE PACKAGE BODY PKG_TEST IS

  PROCEDURE SP_MAIN IS
    L_LIST T_TAB;
  BEGIN
    SELECT ROWNUM BULK COLLECT
      INTO L_LIST
      FROM DUAL
    CONNECT BY LEVEL <= 200;
  
    /* for i in 1..l_list.count loop
      dbms_output.put_line(l_list(i));
    end loop;*/
  
    SP_CALL(L_LIST);
  
  END;

  PROCEDURE SP_CALL(P_LIST IN T_TAB) IS
  
    L_SQL VARCHAR2(32767) := NULL;
    L_RES NUMBER;
  BEGIN
  
    L_SQL := 'select max(column_value)
               from table(:p_fid)
              where column_value <=100';
    DBMS_OUTPUT.PUT_LINE(L_SQL);
  
    EXECUTE IMMEDIATE L_SQL
      INTO L_RES
      USING P_LIST;
  
    DBMS_OUTPUT.PUT_LINE(L_RES);
  
  END;

END PKG_TEST;


-- SQL优化

--CTRL + E  本机执行的SQL
--SELECT * FROM V$SQL; 执行的SQL
--Hint

SELECT * FROM TEST1;

--索引  Unique 唯一索引 Normal 正常型B树  Bitmap 位图索引
-- 创建主键 默认 创建 唯一索引
/*+INDEX(T IDX_TEST_01) LEADING(T)*/ T为表名,IDX_TEST_01索z引名

--create bitmap index index_name on 表名(字段名);

CREATE BITMAP INDEX index_test ON TEST1(C2); --创建位图索引
CREATE INDEX index_test ON TEST1(C1); --创建正常型 B树索引

DROP INDEX index_test; --删除索引

--SELECT /*+ INDEX(T index_test)*/ T.* FROM TEST1 TWHERE T.C1 = 'A';
--SELECT /*+ LEADING(T) */ T.* FROM TEST1 T; --在多表关联查询中,指定哪个表作为驱动表,即告诉优化器首先要访问哪个表上的数据。 
--SELECT /*+parallel(T 4)*/ T.*  FROM TEST T; --开并行

SELECT /*+full(A) use_hash(A,B) leading(B)*/
 A.CODE
  FROM TEST A, TEST2 B, TEST3 M --leading 先查询那一个表,最好先查小表

/*   二.oracle访问数据的存取方法
    1) 全表扫描(Full Table Scans, FTS)
    2) 通过ROWID的表存取(Table Access by ROWID或rowid lookup)
    3)索引扫描(Index Scan或index lookup)有4种类型的索引扫描:
     (1) 索引唯一扫描(index unique scan)
     (2) 索引范围扫描(index range scan)
           在非唯一索引上都使用索引范围扫描。使用index rang scan的3种情况:
        (a) 在唯一索引列上使用了range操作符(> < <> >= <= between)
        (b) 在组合索引上,只使用部分列进行查询,导致查询出多行
        (c) 对非唯一索引列上进行的任何查询。     
     (3) 索引全扫描(index full scan)   
     (4) 索引快速扫描(index fast full scan)
            跳跃式索引(Skip Scan Index)。
            
            INDEX (FAST FULL SCAN)和INDEX (FULL SCAN)的区别:前者不会按照索引的顺序执行,因此不保证查询结果按照索引排序。而后者是根据索引本身的顺序进行扫描。
            
    三、表之间的连接

    1,排序 - - 合并连接(Sort Merge Join, SMJ)
    2,嵌套循环(Nested Loops, NL)
    3,哈希连接(Hash Join, HJ)
    另外,笛卡儿乘积(Cartesian Product)*/
    
/*    nested loops适用于一大一小表。其中内表是小表,每取一次值,然后与外表匹配。 
若内表复杂度为n,外表复杂度为m,则整体为O(n*m) 
hash join 适用于大表关联。若内表复杂度为n,外表复杂度为m,则整体为O(n+m) */
SELECT TO_CHAR(SYSDATE-5,'yyyy-MM-dd hh24:mm:ss') from dual;
SELECT TO_date('2014-06-10 12:05:22','yyyy-MM-dd HH24:mi:ss') from dual;
SELECT j.*,j.rowid FROM DBA_JOBS J WHERE J.WHAT LIKE 'PRO_SIC_TEST%'  --查看过程执行JOB的时间
SELECT * FROM DBA_JOBS_RUNNING T WHERE T.JOB = 19197; --查找JOB

--创建 JOB脚本
DECLARE
  JOBNO NUMBER;
BEGIN
   SYS.DBMS_JOB.SUBMIT(JOB       => JOBNO,
                      WHAT      => 'PKG_TEST.PRO_STY_TEST(SYSDATE);',
                      NEXT_DATE => SYSDATE + 1/24,
                      INTERVAL  => 'TRUNC(SYSDATE+1)+11/24');
  COMMIT;
END;


SELECT SUBSTR('ABCDE',2,3) FROM DUAL;

SELECT LENGTH('12345') FROM DUAL;

SELECT LPAD('B',10,'-') FROM DUAL;

SELECT RPAD('B',10,'-') FROM DUAL;


--查看Session
select *
  from gv$process s, Gv$session gn
 where s.ADDR = gn.PADDR
   and gn.STATUS = 'ACTIVE'
   and gn.SCHEMANAME = 'EXB4' --所有者
   AND SID = 1159
   
   
select round(BYTES/1024/1024,2)||'M' from user_segments where segment_name='表名';   --查看表的大小   



--Oracle SQL 数据字典
ALL_TABLE_COMMENTS Oracle 数据字典表 可能通过模糊查询,来查询表的注释

Oracle查询表的名字和comments

select a.table_name,b.comments   from   user_tables a,ALL_TAB_COMMENTS b where a.table_name=b.table_name

SELECT * FROM ALL_TAB_COMMENTS T WHERE T.COMMENTS  LIKE '%客户%';


--Oracle 创建Job

DECLARE
  JOBNO NUMBER;
BEGIN
  SYS.DBMS_JOB.SUBMIT(JOB       => JOBNO,
                      WHAT      => 'PRO_MONTH(TRUNC(ADD_MONTHS(SYSDATE,-1),''MM''),TRUNC(LAST_DAY(ADD_MONTHS(SYSDATE,-1))));',
                      NEXT_DATE => ADD_MONTHS(TRUNC(SYSDATE, 'MM'), 1) + 5 +
                                   3 / 24,
                      INTERVAL  => 'ADD_MONTHS(TRUNC(SYSDATE,''MM''),1)+5+ 3/24');

  COMMIT;
END;


-----Oralce OVER()函数
--ROW_NUMBER() OVER()
SELECT *
  FROM (SELECT EMP.*,
               ROW_NUMBER() OVER(PARTITION BY DEPTNO ORDER BY ROWNUM) CN
          FROM EMP)
 WHERE CN = 1;

--MAX() OVER() 
SELECT MAX(T.NAME) OVER(),T.* FROM EMP T WHERE T.CODE_NO = '762151550'

--CONNECT BY 
SELECT 1 FROM DUAL CONNECT BY ROWNUM <= 5

SELECT DECODE(LEVEL, 1, '1', '2'),LEVEL FROM DUAL CONNECT BY LEVEL <= 5

INSERT /*+APPEND */ INTO TEST (A,B,C,D) SELECT AA,BB,CC,DD FROM T;




--Oracle Function
--L_CURSTR_CODE VARCHAR2(30) := 'SE'; 

FUNCTION FNT_GEN_NO(P_HEAD_CHAR VARCHAR2,
                    P_DATE      DATE,
                    P_DEPT_CODE VARCHAR2,
                    P_CUR_CODE  VARCHAR2) RETURN VARCHAR2 IS
  L_CE_NO VARCHAR2(30);
BEGIN
  SELECT P_HEAD_CHAR || TO_CHAR(P_DATE, 'YYMM') ||
         DECODE(P_CUR_CODE,
                L_CURSTR_CODE,
                LPAD(SEQ_MON_INV.NEXTVAL, 9, '0'),
                LPAD(SEQ_ABROAD_INV.NEXTVAL, 9, '0'))
    INTO L_CE_NO
    FROM DUAL;
  RETURN L_CE_NO;
EXCEPTION
  WHEN OTHERS THEN
    RETURN '000000000000';
END FNT_GEN_NO;

 

分享到:
评论

相关推荐

    oracle学习笔记整理

    以下是对Oracle学习笔记整理的主要知识点的详细说明: 1. **数据库选择**: 在决定使用哪种数据库时,通常需要考虑项目的规模、性能需求、安全性要求以及可用资源。Oracle数据库因其稳定性、可扩展性和高性能而被...

    Oracle自整理学习资料

    故障诊断和性能优化也是Oracle学习的重要部分。日志分析、性能监控工具(如SQL*Plus、企业管理器或ASM Inspector)的使用,以及SQL调优,都是提升数据库效率的关键技能。 最后,Oracle还提供了高级特性,如数据库...

    Oracle技术大牛整理文档《Oracle 学习手册》

    Oracle技术大牛整理常见问题很详细的讲解,总共含有千多页文档,都是最新,2012版 TianleSoftware Oracle 学习手册 在 Oracle 几年的学习中,, 做了很多的实验, 也遇到了很多的问题,在这个过程中,积累了一些...

    Oracle学习整理资料[中国人民大学]

    总的来说,这份"Oracle学习整理资料[中国人民大学]"是一份全面而深入的教育资源,不仅覆盖了Oracle数据库的基础知识,还包含了实战技巧和高级主题。通过系统学习,你可以掌握Oracle数据库的精髓,为你的IT职业生涯...

    oracle 学习整理基本 基础学习也重要

    Oracle 学习整理基础知识点总结 Oracle 学习整理基本基础学习也重要,作为 Oracle 学习的入门指南,本文档旨在帮助学习者掌握 Oracle 的基本概念和操作命令。本文档基于 Oracle 10g 知识,但也添加了一些 Oracle 11...

    Oracle学习资料 自己整理的

    从给定的文件标题“Oracle学习资料 自己整理的”以及描述“从OCA到OCP内容,常用的命令和使用方法,技巧等”,我们可以提炼出一系列关于Oracle数据库管理与操作的关键知识点,涵盖从初级到高级的技能提升路径。...

    Oracle数据库整理学习手册

    ### Oracle数据库整理学习手册知识点详解 #### 一、Oracle数据库简介 Oracle数据库是由甲骨文公司(Oracle Corporation)开发的一款关系型数据库管理系统。甲骨文公司作为全球知名的软件服务商之一,在数据库市场上...

    oracle学习整理高级阶段 收获多多的

    Oracle学习整理高级阶段 收获多多的 Oracle学习整理高级阶段是指在Oracle数据库管理和开发的高级阶段,需要对Oracle数据库的各种特性和功能进行深入的学习和掌握。在这个阶段,学习者需要对Oracle数据库的架构、...

    最近学习oracle 整理的一些学习资料

    以上是根据给定的学习资料整理的关键知识点,涵盖了 SQL Plus 的基础操作、数据库实例的启动与关闭流程、Linux 下 Oracle 用户的基本管理操作以及 SQL Navigator 的使用方法等内容。希望这些内容能够帮助大家更好地...

    Oracle知识点整理笔记(二)Oracle学习进阶

    方便后来学者更好,更快的学习Oracle知识,资源里面有Oracle学习资料,以及学习期间整理辅助学习资料,此资源内容是Oracle知识点整理笔记的下篇,Oracle的初学篇知识学习可以查看Oracle知识点整理笔记一。

    Oracle学习资料整理

    这份Oracle学习资料整理涵盖了Oracle的基础知识,包括命令、SQL语言、常用函数等多个方面,对于初学者或需要巩固基础知识的IT从业者来说是一份宝贵的资源。 首先,我们来看Oracle的相关命令。`sqlplus`是Oracle提供...

    Oracle知识点整理笔记(一)系统的学习Oracle

    该资源是系统学习Oracle后做的整理,方便后来学者更好,更快的学习Oracle知识,资源里面有Oracle学习资料,以及学习期间整理辅助学习资料,此资源内容是Oracle知识点整理笔记的上篇,Oracle的下篇知识学习可以查看...

    Oracle学习笔记.doc

    Oracle学习笔记 以下是我这一周学习oracle整理的笔记,包括课堂的内容和自己看额外看的视频补充的一些内容,基本上囊括了所有oracle的基本知识。主要的形式是例子代码加代码解释加运行结果,我个人认为对于没有学习...

    Oracle技术狂人整理出的文档

    Oracle技术大牛整理常见问题很详细的讲解,总共含有千多页文档,都是最新,2012版 TianleSoftware Oracle 学习手册 在 Oracle 几年的学习中,, 做了很多的实验, 也遇到了很多的问题,在这个过程中,积累了一些...

    oracle学习资料整理.docx

    2. **Oracle基础与提升视频课程**:51CTO的在线课程提供了一个系统的Oracle学习路径,从基础操作到进阶技能都有覆盖。 3. **尚硅谷oracle数据库、sql、plsql实战教程**:这套完整的教程通过实战案例帮助你巩固所学,...

    Oracle学习计划(目录)

    自己整理的Oracle学习计划,里面包含了一些学习oracle的基本目录,适合软件开发。

    Oracle学习笔记 Oracle学习笔记

    根据提供的信息,我们可以总结出以下Oracle数据库学习的关键知识点: ...以上是基于提供的内容整理出的Oracle学习笔记中的关键知识点。通过理解这些基础知识,可以更好地管理和操作Oracle数据库。

    Oracle技术大牛整理文档《Oracle 学习手册

    TianleSoftware的《Oracle学习手册》是涵盖了Oracle数据库基础知识和高级特性的一份详细文档,适合数据库管理员(DBA)和开发人员进行学习。 Oracle OLTP和OLAP介绍: OLTP(Online Transaction Processing,联机...

    oracle表空间学习整理,包括常用sql

    以上内容涵盖了Oracle表空间的基本概念、作用和常见操作,通过学习和实践,你可以更有效地管理和优化你的Oracle数据库存储。在实际工作中,根据业务需求灵活运用这些知识,将有助于提升数据库的性能和可用性。

Global site tag (gtag.js) - Google Analytics