精华内容
下载资源
问答
  • 2018-11-26 18:59:02

    已经验证!!!欢迎相互学习交流

    --原来EXPENSE_ITEM_CODE, EXPENSE_TYPE_CODE, EXP_REPORT_TYPE_CODE这三个为唯一索引约束,现在添加company_id到这三个中,

    四个组成唯一索引约束。(思路,需要先删除该索引约束名,在=再创建)

    注意事项(报错dupplicate keys found,若表中要创建的唯一索引约束的四个字段在数据库该表中有重复,则提示该错误,删除重复记录,再创建即可)

    drop index EXP_EXPENSE_ITEM_DESCS_U1;

    create unique index EXP_EXPENSE_ITEM_DESCS_U1 on EXP_EXPENSE_ITEM_DESCS (COMPANY_ID,EXPENSE_ITEM_CODE, EXPENSE_TYPE_CODE, EXP_REPORT_TYPE_CODE)

    更多相关内容
  • oracle唯一索引

    2022-04-12 11:22:47
    为NULL的字段可以设置唯一索引 1:多条字段为NULL的记录,可以正常插入数据库中 2:重复值插入会正常校验重复值 Tips:设置字符串null也是会校验重复值 测试3770条NULL值记录,一条有值的记录。单独查询这个...

     

    为NULL的字段可以设置唯一索引

    1:多条字段为NULL的记录,可以正常插入数据库中

    2:重复值插入会正常校验重复值

    Tips:设置字符串null也是会校验重复值

    测试3770条NULL值记录,一条有值的记录。单独查询这个字段值,可以命中索引查询

    展开全文
  • Oracle唯一索引功能替代

    千次阅读 2021-05-03 10:08:10
    Oracle唯一索引字段全部为NULL时,不做唯一性判断,允许重复插入,而在8t中即使均为NULL值也会做重复值判断,在某些场景下客户会存在此类需求,在数据量不大不存在性能问题的情况下可以考虑通过如下方式进行替代...

    Oracle唯一索引在字段全部为NULL时,不做唯一性判断,允许重复插入,而在8t中即使均为NULL值也会做重复值判断,在某些场景下客户会存在此类需求,在数据量不大不存在性能问题的情况下可以考虑通过如下方式进行替代

    示例表

    create table "informix".secconstitute

    (

    id decimal(20,0) not null ,

    code varchar(32),

    name varchar(64),

    sec_id decimal(20,0),

    meas_id decimal(20,0),

    constitute_type decimal(10,0),

    order_no decimal(10,0),

    meas_value decimal(22,6),

    ttc_therm decimal(22,6),

    region_id decimal(10,0),

    replicate_flag decimal(10,0),

    download_region decimal(10,0),

    operator_str varchar(64),

    factor_str varchar(64),

    if_reverse decimal(3,0),

    condi_type decimal(10,0),

    primary key (id) constraint "informix".pk_secconstitute

    ) extent size 64 next size 64 lock mode row;

    revoke all on "informix".secconstitute from "public" as "informix";

    create unique index "informix".idx_secid_measid_constitutetype_orderno

    on "informix".secconstitute (sec_id,meas_id,constitute_type,

    order_no) using btree in dbs3;

    思路

    1.删除原唯一索引替换为普通索引维持索引功能

    2.通过触发器调用SPL进行非NULL值的唯一性判断,必要时中止操作

    代码如下

    drop index if exists index_438_1;

    create index index_438_1 on secconstitute(sec_id,meas_id,constitute_type,order_no);

    drop procedure if exists p4_ti_secconstitute_proc;

    create procedure p4_ti_secconstitute_proc() referencing new as new for secconstitute

    define v_str varchar(100);

    define v_col varchar(100);

    define v_sql lvarchar(500);

    define v_count int8;

    define v_flag int;

    let v_col='';

    let v_str='';

    let v_count=0;

    let v_sql='';

    if new.sec_id is not null or new.meas_id is not null or new.constitute_type is not null or new.order_no is not null then

    if new.sec_id is not null then

    let v_col='sec_id';

    let v_str='sec_id='||new.sec_id;

    else

    let v_col='sec_id';

    let v_str='sec_id is null';

    end if;

    if new.meas_id is not null then

    if v_col != '' then

    let v_col=v_col||','||'meas_id';

    else

    let v_col='meas_id';

    end if;

    if v_str != '' then

    let v_str=v_str||' and meas_id='||new.meas_id;

    else

    let v_str='meas_id='||new.meas_id;

    end if;

    else

    if v_col != '' then

    let v_col=v_col||','||'meas_id';

    else

    let v_col='meas_id';

    end if;

    if v_str != '' then

    let v_str=v_str||' and meas_id is null';

    else

    let v_str='meas_id is null';

    end if;

    end if;

    if new.constitute_type is not null then

    if v_col != '' then

    let v_col=v_col||','||'constitute_type';

    else

    let v_col='constitute_type';

    end if;

    if v_str != '' then

    let v_str=v_str||' and constitute_type='||new.constitute_type;

    else

    let v_str='constitute_type='||new.constitute_type;

    end if;

    else

    if v_col != '' then

    let v_col=v_col||','||'constitute_type';

    else

    let v_col='constitute_type';

    end if;

    if v_str != '' then

    let v_str=v_str||' and constitute_type is null';

    else

    let v_str='constitute_type is null';

    end if;

    end if;

    if new.order_no is not null then

    if v_col != '' then

    let v_col=v_col||','||'order_no';

    else

    let v_col='order_no';

    end if;

    if v_str != '' then

    let v_str=v_str||' and order_no='||new.order_no;

    else

    let v_str='order_no='||new.order_no;

    end if;

    else

    if v_col != '' then

    let v_col=v_col||','||'order_no';

    else

    let v_col='order_no';

    end if;

    if v_str != '' then

    let v_str=v_str||' and order_no is null';

    else

    let v_str='order_no is null';

    end if;

    end if;

    if v_str != '' then

    let v_sql='select count(*) from secconstitute where '||v_str||' group by '||v_col;

    prepare p from v_sql;

    declare c cursor for p;

    open c;

    fetch c into v_count;

    free p;

    close c;

    free c;

    end if;

    if v_count >1 then

    raise exception -746,0,'Duplicated Sec_Id,Meas_Id,Constitue_Type,Order_No Value Founded!!';

    end if;

    end if;

    end procedure;

    展开全文
  • 当where子句对某一列使用函数时,除非利用这个简单的技术强制索引,否则Oracle优化器不能在查询中使用索引。 通常情况下,如果在WHERE子句中不使用诸如UPPER、REPLACE 或SUBSTRD等函数,就不能对指定列建立特定的...
  • oracle查询表 索引唯一约束、字段

    万次阅读 2022-01-19 15:10:19
    查询表的索引情况 select t.Index_Name,t.table_name,t.column_name,i.tablespace_name,i.uniqueness from user_ind_columns t,user_indexes i where t.index_name=i.index_name and t.table_name=i.table_name ...

    查询表的索引情况

    select t.Index_Name,t.table_name,t.column_name,i.tablespace_name,i.uniqueness from user_ind_columns t,user_indexes i where t.index_name=i.index_name and t.table_name=i.table_name and t.table_name='大写表名:这里不支持小写表名';

    1、查找表的所有索引(包括索引名,类型,构成列):
     

    select t.*,i.index_type from user_ind_columns t,user_indexes i where t.index_name = i.index_name and t.table_name = i.table_name and t.table_name = 要查询的表



    2、查找表的主键(包括名称,构成列):
     

    select cu.* from user_cons_columns cu, user_constraints au where cu.constraint_name = au.constraint_name and au.constraint_type = 'P' and au.table_name = 要查询的表



    3、查找表的唯一性约束(包括名称,构成列):
     

    select column_name from user_cons_columns cu, user_constraints au where cu.constraint_name = au.constraint_name and au.constraint_type = 'U' and au.table_name = 要查询的表
    


    4、查找表的外键(包括名称,引用表的表名和对应的键名,下面是分成多步查询):

    select * from user_constraints c where c.constraint_type = 'R' and c.table_name = 要查询的表

    查询外键约束的列名:

    select * from user_cons_columns cl where cl.constraint_name = 外键名称

    查询引用表的键的列名:

    select * from user_cons_columns cl where cl.constraint_name = 外键引用表的键名

    5、查询表的所有列及其属性

    select t.*,c.COMMENTS from user_tab_columns t,user_col_comments c where t.table_name = c.table_name and t.column_name = c.column_name and t.table_name = 要查询的表

    查询oracle表的信息(表,字段,约束,索引)
    1、查询出所有的用户表
    select   *   from   user_tables   可以查询出所有的用户表
    2、查询出用户所有表的索引
    select   *   from   user_indexes
    3、查询用户表的索引(非聚集索引):
    select   *   from   user_indexes where   uniqueness='NONUNIQUE'
    4、查询用户表的主键(聚集索引):
    select   *   from   user_indexes where   uniqueness='UNIQUE'
    5、查询表的索引
    select t.*,i.index_type from user_ind_columns t,user_indexes i where t.index_name = i.index_name and
    t.table_name='NODE'
    6、查询表的主键
    select cu.* from user_cons_columns cu, user_constraints au where cu.constraint_name = au.constraint_name and
    au.constraint_type = 'P' AND cu.table_name = 'NODE'
    7、查找表的唯一性约束(包括名称,构成列):
    select column_name from user_cons_columns cu, user_constraints au where cu.constraint_name=au.constraint_name and
    cu.table_name='NODE'
    8、查找表的外键
    select * from user_constraints c where c.constraint_type = 'R' and c.table_name='STAFFPOSITION'
    查询外键约束的列名:
    select * from user_cons_columns cl where cl.constraint_name = 外键名称
    查询引用表的键的列名:
    select * from user_cons_columns cl where cl.constraint_name = 外键引用表的键名
    9、查询表的所有列及其属性
    select t.*,c.COMMENTS from user_tab_columns t,user_col_comments c where t.table_name='NODE'

    展开全文
  • NULL 博文链接:https://panshaobinsb.iteye.com/blog/1772716
  • 于是手动测试,环境采用Oracle自带的scott用户下的emp表。 1.首先查看如下语句的执行计划(此时表只有主键索引): 2.添加IX_TEST(deptno,comm)后查看执行计划: 发现依然是全表扫描。 3.为deptno列添加非空约束...
  • 当where子句对某一列使用函数时,除非利用这个简单的技术强制索引,否则Oracle优化器不能在查询中使用索引。通常情况下,如果在WHERE子句中不使用诸如UPPER、REPLACE或SUBSTRD等函数,就不能对指定列建立特定的条件...
  • 4.建索引 create index N_APP21_1 on APP21 (AKB020)  tablespace DATA  pctfree 10  initrans 2  maxtrans 255; 5.eate/Recreate primary, unique and foreign key constraints  alter table APP21  ...
  • Oracle多个字段联合索引保证唯一

    千次阅读 2021-09-26 16:00:30
    今天在开发过程中遇到了需要两个字段联合保证唯一性,所以查阅了一些资料和博客,梳理一下以便之后用到!!! 首先,你要搞明白什么是唯一索引唯一约束,其次它们之间的区别是什么? 前提 二者的定义 唯一...
  • 索引都会包含rowid来定位到具体的位置,但是唯一索引不会用rowid来作为“索引键”的一部分比如在列col1上建立非唯一索引,则其索引键是col1| rowid,这样索引键就唯一了,但唯一索引不会在列上加上rowid构成索引键...
  • --创建唯一索引 create unique index 索引名 on 表名(列名); --创建普通索引 create index 索引名 on 表名(列名); 实际区别: -唯一索引:当前索引列不会有重复的值 -普通索引:当前索引列可能有重复的值 使用...
  • 转:首先,在大多数情况下,复合索引比单字段索引好.以税务系统的SB_ZSXX(申报类_征收信息表)为例,该表为税务系统最大的交易表.如果分别按纳税人识别号,税务机关代码,月份3个字段查询,每个字段在该表中的可选性或约束...
  • 1、年字段唯一索引,相当于主键id,不允许任何重复年份。 2、届次做复合索引,相同的届值只能对应不重复的次。比如可以是:十二届第一次、十二届第二次、十二届第三次,不能出现两个十二届第二次什么的(具体参照...
  • 11我们知道索引列如果出现null值会导致索引失效。具体情况如下:表中数据如下: 可见storeid列有null值。...那该如何让该在字段有空值的情况下触发索引呢?有两种方法:1、建立函数索引 create index xxx on 表名(列...
  • 关于分区表与唯一索引,以下是一点测试记录。非分区字段不能创建Local Unique索引:SQL> connect eygle/eygleConnected.SQL> CREATE TABLE docinfo(2 docid NUMBER ,3 docsz NUMBER ,4 CONSTRAINT uk_docid ...
  • oracle索引字段可以设置为空?

    千次阅读 2017-03-08 15:39:13
    答案是肯定的; 可以建,就是有点不合理; 索引是告诉你有什么,并不会告诉你没有什么; 如果少数几条null无所谓,如果很多null/很多重复值建索引的意义就打折扣了
  • date字段上建立了索引,但是sql语句中使用的where条件如下:WHERE to_char(start_time,’yyyy-mm-hh hh24:mi:ss’) > ‘2009-08-01 00:00:00′ AND to_char(start_time,’yyyy-mm-hh hh24:mi:ss’) < '2009-08...
  • oracle数据库索引增加和删除

    千次阅读 2022-01-04 15:05:22
    1.增加索引 create index 索引名 on 表名 (列名) tablespace 数据库名 pctfree 10 -- initrans 2 maxtrans 255 storage ( initial 64K next 1M minextents 1 maxextents unlimited ) nologging; 2....
  • 概述关于优化这个体系博大精深,例如内核优化、系统优化、中间件优化、oracle优化、sql优化、网络优化等等,网上很多思路都比较偏,比较杂,后面小编会花比较多时间去梳理下这方面内容,深入研究下这方面,试着去做...
  • 唯一性约束通过唯一性...在没有索引的情况下,创建唯一性约束会自动创建一个唯一索引,但Oracle官方建议将唯一性约束和索引分开,这该怎么理解呢?原来在创建唯一性约束时默认创建的唯一索引会随着唯一性约束DIS
  • Oracle 查询表的索引包含的字段

    千次阅读 2020-07-30 15:40:00
    select a.uniqueness 索引类型,b.index_name 索引名称,b.column_name 字段 from user_indexes a ,user_ind_columns b where a.table_name=b.table_name and a.index_name = b.index_name and ...
  • oracle唯一索引

    万次阅读 2018-01-03 11:38:43
    1 oracle支持唯一索引。可以理解为唯一约束。用来控制和约束需要插入的表中字段。(主键自动为唯一约束,且不为空   )。 2 唯一索引,可以理解为:唯一约束,用来控制表中字段的。例如表中有两个或多个字段...
  • oracle查询索引(oracle查看表索引)

    千次阅读 2021-04-30 10:02:20
    oracle查询索引(oracle查看表索引)2020-07-24 11:01:26共10个回答选中表右键View然后查看index通过PL/SQL可以直接查看某表是否建索引,通过SQL查询selectstatus,T.*fromuser_indexesTwheretable_name='表名'oracle...
  • 主要给大家介绍了关于Oracle Index索引无效的原因与解决方法,文中通过示例代码以及图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
  • Select *FROM dba_ind_columnsWhere index_owner='TEST73' AND table_name=upper('tx_log_t')可以查询数据库的表上面的索引字段。参考博文:Question: I added an index hint in my query, but the hint is being ...
  • oracle数据库中字段为空时如何建立索引 直接在字段有空值的列上建立一个函数索引 这里我们用到 decode函数 我们可以建立一个函数索引 DECODE(字段名,NULL,‘0’,NULL) 建立好函数索引之后 我们想要用上此索引 查询...
  • Oracle数据库唯一索引的区别是本文我们主要介绍的内容,在使用TOAD来操作Oracle数据库时,会注意到创建约束时有Primary Key、Check、Unique和Foreign Key四种类型的约束,这与SQL Server中的约束没有什么区别,这里...
  • oracle 全文检索 oracle全文索引 多列字段检索,匹配多列字段搜索功能。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 122,161
精华内容 48,864
关键字:

oracle唯一索引增加字段