• Oracle笔记


    基础

    取余  mod(number1,number2)

    update resident set tall=(mod(id,20)+160);

    update resident set gender='女' where mod(id,2)=1;

    不等于 <>

    distinct

    union all

    将两个列名相同的表的记录 合成一张表

    trim(字段)  消除返回值的空格

    select trim(t1.*) from BMNC_PMARTVW.T98_OD_ROUTE_DD t1; 

    字符串补齐

    参数:num-被补齐的字符串

               6-补齐到几位。

               ‘0’-用哪个字符补齐。如果未设置,则添加空格

    select lpad(num,6,'0') from shopMBase;

    结果:

    LPAD(NUM,6,'0')

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

    000379        

    000381        

    000384        

    000385        

    000387         

    更新:

    update shopmbase set num=lpad(num,6,'0');

     

    字符串连接

    指令:a||b

    select num||'01' from shopmbase

     

    max 函数

    用法1:

     select max(field) from table

    举例:

    select max(ddate) from tb_oil;

    用法2:

    select f1,max(f2) from table group by f1;

    结果:

    常见错误,缺少group by f1:

    Date取日期部分,转换成字符串

    Select TO_CHAR(BirthDate, 'YYYY-MM-DD')   From resident;

    Date字符串转日期

    to_date('"+resi.BirthDate.toString()+"','yyyy-mm-dd');



    Group 查时间最新记录

     

     

     

    Group按某字段统计

    select engiID,count(engiID) from shopMbase group by engiID;

    ENGIID COUNT(ENGIID)

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

             1          2852

    Null值用0替换

    select a.ID,a.Name,nvl(b.sum,0) as totalSum from shopengi a

    left join (select engiID,count(engiID) as sum from shopMbase group by engiID) b

    on a.ID=b.engiID;

    Group按区统计

    select a.ID,a.name,b.allCount from attrshop a right join (select district,count(*) as allCount from shopmbase group by district) b

    on a.ID=b.district;

     

    单独查看最新时间的记录,使用max(fieldA), fieldB group b field B,不能select出其他字段

    select wingname,max(ddate) from tb_oil group by wingname;

    like

    select * from shopmbase where address like '%北京%';

    is null / is not null

    说明:active类型是varchar2; 目标:取北京地区的活跃商户

    select * from shopmbase where (address like '%北京%' or Name like '%北京%') and active is not null;

    行数:3042行

    oracle中取top

    背景:oracle不支持 top语句

    select * from

    (select ID from shopmBase order by ID asc)

    where rowNum<=3;

     

    rownum 排序分页

    rownum作用:为select 结果添加列rownum (行号)。

    为何要用别名:因为rownum不能作为列名。

    为何用子查询:因为rownum是执行完select之后再添加伪列。

    select b.* from

    (select a.*,rownum rn from (select * from shopmbase  where hyid=10 and isactivated=2 and district=4 order by id) a) b

    where rn>=5 and rn<=10;

    结论:3层select

      第一层  非rn条件和order

      第二层  select a.*, rownum rn

      第三层  select b.*, rn where rn条件

    分页加载效率

    Ajax,时间控制在0.2s以内,则不必blockUI

     


     

     

     

     

    综合

    列别名  (t1.field as f1)

    t.no as no,

    table 简称(重要习惯 select t1.field from table t1)

    select top 1 t1.* from BMNC_PMARTVW.T98_OD_ROUTE_DD t1; 

    说明: 使用简称,  之后 from 全称  简称, 是简化查询的 重要习惯。

    left Join  (联合查询)

    联合两表

    select  t1.f1,t1.f2 from tableA t1

    left join tableB t2

    on t1.id=t2.id

    联合两表,查居民所有属性

    select a.*,b.attrvid from resident a

    left join resiattr b

    on a.id=b.resiid;

    select attrvid.attrvalue,c.ResiID,c.NAME from attrvid

    right join

    (select a.resiID,a.attrVID,b.NAME from resiattr a

    left join resident b

    on a.resiid=b.id) c

    on attrvid.attrvid=c.attrvid;

    联合四表 (查所有票种)

    select t1.prod_id as id,

                t1.prod_nme as name,

                trim(t1.prod_cate_cd) as categoryCode,

                trim(t3.prod_cate_desc) as categoryName,

                trim(t2.payment_type_code) as paymentTypeCode,

                trim(t4.payment_type_name) as paymentTypeName

          from  bmnc_pdatavw.t50_product t1

          left join bmnc_pdatavw.t50_prod_payment_his t2

             on t1.prod_id = t2.prod_id

             and   t2.start_dt <= current_date

             and   t2.end_dt > current_date

          left join bmnc_pcodevw.t99_prod_cate_cd t3

             on t1.prod_cate_cd = t3.prod_cate_cd

          left join bmnc_pcodevw.t99_prod_payment_cd t4

             on t2.payment_type_code = t4.payment_type_code

          where t1.effect_dt <= current_date

             and   t1.invalid_dt > current_date

    联合四表(得hyVal,isVal,dName shopMis)

    select e.*,f.name as dName from (select c.*,d.value as isVal from (select a.*,b.value as hyVal from shopmbase a

    left join shopothattr b

    on a.hyid=b.id) c

    left join shopothattr d

    on c.isactivated=d.id) e

    left join shopdistrict f

    on  e.district=f.id;

     

    数据导入导出

    excel导入导出Oracle

    工具:Oracle SQL Developer

    选择表,右键-导入数据

    d

    导出数据库

    工具:Oracle SQL Developer

    具体:菜单->工具->数据库导出

    成果:.sql文件

    备注:导出时,不勾选“方案”,这样sql语句中不会包含  用户.

    导入数据库

    工具:Oracle SQL Developer

    具体:菜单->文件->打开, 选择.sql文件, 执行

    恢复数据库

    第一步: 清空原来的表,序列,触发器

    drop table shopmbase;

    drop table shopOthattr;

    drop table shopDistrict;

    drop table shopEngi;

    drop sequence seq_attrShop;

    drop sequence seq_shopEngi;

    drop sequence shm_sequence;

    第二步:使用导入脚本.sql

     

    mybatis效果

     在xml中写查询语句

     可以插入 判断(if), 循环(foreach)

    mybatis 文件 实体

    .xml

    mybatis中 表示 sql语句中的变量

    #{变量名}

     

       <update id="delete" parameterType="long">

           <![CDATA[

           update tf_fare_proposal

           set   del_flg = 1

          where id = #{id}

          ]]>

       </update>

    queryMapper.xml位置

    Oralce相关

    查看Oracle版本

    select * from v$version

    Oracle大小写和字符串表示

    序号

    规则

    举例

    1

    Insert,select这些关键字不区分大小写

    2

    表名不区分大小写

    3

    列名区分大小写,列名只能用双引号

    4

    字符串只能用单引号

    Oracle中的varchar2 和 null值

    1>varchar2的默认值是null. 某列类型是varchar2, 插入记录,若该列未设置值,则列值为null.

    insert into resident(NAME) values('测试用户1');

    select * from resident where NAME='测试用户1';

    2>用  IDNUM is null来 表示 IDNUM是空

    select * from resident where NAME='测试用户1' and IDNUM is null;

    select * from resident where NAME='测试用户1' and IDNUM=null;

    select * from resident where NAME='测试用户1' and IDNUM='';

    3>’’不是null.

    4>如果列值是null,

    用Java的 Result.getString(“IDNUM”)将 提示 列名无效

    是/不是null

     是null     column is null

    不是null    column is not null

    表空间

    创建

    create tablespace gxktablespace

    datafile 'F:TableSpacesgxkTableSpacegxktablespace.dbf'

    size 32m

    autoextend on

    next 32m maxsize 2048m

    extent management local;

    效果:在zfmi文件夹下就能看到表空间文件gxktablespace2.dbf了

    临时表空间:

    create temporary tablespace tempTestTS 

    tempfile 'F:TableSpacesgxkTableSpace empTestTS.dbf'

    size 50m 

    autoextend on 

    next 50m maxsize 20480m 

    extent management local; 

    删除

    drop tablespace zfmi_temp including contents and datafiles;

    效果:在zfmi文件夹下表空间文件消失。

    用户

    创建用户名/密码

    create user test identified by test

    default tablespace testTS;

    GRANT connect,resource,dba TO test;

    删除用户

    drop user gxk;

    grant身份与登录身份的对应

           Grant  dba   登录身份   Normal

           Grant  sysdba 登陆身份  sysdba

    Unlimited tablespace  允许 gxk使用任意表空间

    创建

    //自己写的语句

    create table tb_Test(

    "ID" number not null primary key,

    "Name" varchar(50) not null,

    "Age" number,

    "Job" varchar(50)

    );

    //sql developer生成

      CREATE TABLE "SYSTEM"."TB_TEST"

       ( "ID" NUMBER NOT NULL ENABLE,

           "NAME" VARCHAR2(50 BYTE) NOT NULL ENABLE,

           "AGE" NUMBER,

           "JOB" VARCHAR2(50 BYTE),

            CONSTRAINT "TB_TEST_PK" PRIMARY KEY ("ID")

      USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255

      STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645

      PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)

      TABLESPACE "SYSTEM"  ENABLE

       ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING

      STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645

      PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)

      TABLESPACE "SYSTEM" ;

    删除

    drop table tb_Test

    主键

    create table TB_PERATTRVALID(

       PERID NUMBER NOT NULL,

       ATTRVALID NUMBER NOT NULL,

       CONSTRAINT TB_PERATTRVALID_PK PRIMARY KEY(PERID,ATTRVALID),

       CONSTRAINT TB_PERATTRVALID_FK1 FOREIGN KEY(PERID) REFERENCES TB_TEST(ID),

       CONSTRAINT TB_PERATTRVALID_FK2 FOREIGN KEY(ATTRVALID) REFERENCES TB_ATTRVAL(ATTRVALID)

     )

    外键

    create table TB_ATTRVAL(

       ATTRVALID  NUMBER PRIMARY KEY,

       ATTRVALNAME VARCHAR(100) NOT NULL,

       ATTRKINDID NUMBER,

       CONSTRAINT TB_ATTRVAL_FK1 FOREIGN KEY(ATTRKINDID) references TB_ATTRKIND(ID)

     )

    自增主键

    1.创建sequence

    CREATE SEQUENCE emp_sequence
    INCREMENT BY 1 -- 每次加几个
    START WITH 1 -- 从1开始计数
    NOMAXVALUE -- 不设置最大值
    NOCYCLE -- 一直累加,不循环
    NOCACHE -- 不建缓冲区


    以上代码完成了一个序列(sequence)的建立过程,名称为emp_sequence,范围是从1开始到无限大(无限大的程度是由你机器决定的),nocycle 是决定不循环,如果你设置了最大值那么你可以用cycle 会使seq到最大之后循环.对于nocache顺便说一下如果你给出了cache值那么系统将自动读取你的cache值大小个seq
    ,这样在反复操作时会加快运行速度,但如果遭遇意外情况如当机了或oracle死了,则下次取出的seq值将和上次的不连贯.(如果连不连贯无所谓建议用cache,因为时间就是金钱呀!跑题了!)
    书接上文,你只有了表和序列还不够,还需要一个触发器来执行它!代码如下:

    2.创建trigger
    CREATE TRIGGER "tgr_tbTest" BEFORE

    INSERT ON TB_TEST FOR EACH ROW WHEN (new.id is null)

    begin

    select emp_sequence.nextval into :new.id from dual;

    end;

    3.插入数据测试
    INSERT INTO example(Name,phone,address) Values('Cao','56498543','Heibei');

    行操作

    insert

    insert into tb_test("Name","Age","Job") values('sasuke',28,'SE');表名,关键字不区分大小写。

    列名区分大小写。

    delete

    delete from tb_test;

    备注:不需要 *;

    军规

    无论何时,列名一定要用 引号包围起来,并且区分大小写。

    添加列

    ALTER TABLE TB_TEST ADD COMPANY VARCHAR2(100);

    删除列

    如果列存在 约束,先删除约束,再删除列。

    不存在,则直接删除

    ALTER TABLE 表名 DROP CONSTRAINT 默认约束名

    GO

    ALTER TABLE 表名   DROP COLUMN 字...

    改名列

    序列 sequence

    创建

    CREATE SEQUENCE emp_sequence
    INCREMENT BY 1 -- 每次加几个
    START WITH 1 -- 从1开始计数
    NOMAXVALUE -- 不设置最大值
    NOCYCLE -- 一直累加,不循环
    NOCACHE -- 不建缓冲区

    删除

    drop sequence emp_sequence;

    触发器Trigger

    创建

    CREATE TRIGGER "触发器名称" BEFORE
    INSERT ON example FOR EACH ROW WHEN (new.id is null)
    begin
    select emp_sequence.nextval into :new.id from dual;
    end;

    删除

    设计属性表

    ballon 属性设计

    Person属性设计

    Person

    列名

    描述

    ID

    人ID

    Name

    人姓名

    PerAttrVaID (双外键;双外键成主键)

    列名

    描述

    attrValID

    属性值ID

    personID

    人ID

    AttrVal

    列名

    描述

    attrValID

    属性值ID  (主键)

    attrVal

    属性值   (非空)

    attrKindID

    种类ID  (外键)

    AttrKind

    列名

    描述

    attrKindID

    属性种类ID  (主键)

    Name

    种类名

    //查看所有属性名和属性值

    select A.ATTRVALID,B.NAME,A.ATTRVALNAME FROM TB_ATTRVAL A

    LEFT JOIN tb_attrkind B

    ON A.ATTRKINDID=B.KINDID;

    教育程度可能取值

     

    错误编号

    Ora-12519

    描述:

    Listener refused the connection with the following error:

    ORA-12519, TNS:no appropriate service handler found

    原因:Oracle并发 Processes数到达上限,拒绝当前请求。

  • 相关阅读:
    JavaScript 对象
    Java条件语句
    函数的使用注意事项:
    函数的特点
    函数的格式
    for循环
    break和continue的区别和作用
    注意事项
    CSS浮动清除的方法
    转:Oracle 中union的用法
  • 原文地址:https://www.cnblogs.com/imihiroblog/p/3636791.html
Copyright © 2020-2023  润新知