精华内容
下载资源
问答
  • oracle的常用sql 表的新增,修改唯一索引,主键,备注
    千次阅读
    2019-09-18 21:17:23

    1.创建表
    create table APP21
    (
      id         VARCHAR2(20) not null,
      aae036     DATE,
      nums       NUMBER(14),
      sjzt       VARCHAR2(6) default '0' not null,
      time       DATE default sysdate not null
    )

    2.分配表空间
    tablespace DATA
      pctfree 10
      initrans 1
      maxtrans 255
      storage
      (
        initial 64K
        minextents 1
        maxextents unlimited
      );


    3添加备注给表字段
    comment on table APP21
      is '医保APP订单查询主表';

    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
      add constraint PK_APP21 primary key (ID)
      using index 
      tablespace DATA
      pctfree 10
      initrans 2
      maxtrans 255;
    alter table APP21
      add constraint U_APP21_1 unique (HISORDERID)
      using index 
      tablespace DATA
      pctfree 10
      initrans 2
      maxtrans 255;

    6.表字段,并添加备注

    alter table app21 
    add jylsh varchar2(2000);
    comment on column app21.jylsh is '交易流水号';
    commit;
     

    更多相关内容
  • 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;

    展开全文
  • 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'

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

    千次阅读 2021-09-26 16:00:30
    今天在开发过程中遇到了需要两个字段联合保证唯一性,所以查阅了一些资料和博客,梳理一下以便之后用到!!! 首先,你要搞明白什么是唯一索引唯一约束,其次它们之间的区别是什么? 前提 二者的定义 唯一...

         今天在开发过程中遇到了需要两个字段联合保证唯一性,所以查阅了一些资料和博客,梳理一下以便之后用到!!!

      首先,你要搞明白什么是唯一索引和唯一约束,其次它们之间的区别是什么?

    前提

    二者的定义

     唯一索引:一种索引,不允许具有索引值相同的行,从而禁止重复的索引或键值。系统在创建该索引时检查是否有重复的键值,并在每次使用 INSERT 或 UPDATE 语句添加数据时进行检查。     

     唯一约束:唯一约束保证在一个字段或者一组字段里的数据与表中其它行的数据相比是唯一的(联合字段中,可以包含空值。)   

    备注:在Oracle中,唯一约束最多可以有32列。唯一约束可以在创建表时或使用ALTER TABLE语句创建

    二者的区别

    约束和索引,前者是用来检查数据的正确性,后者用来实现数据查询的优化,目的不同。
    唯一约束与唯一索引有所不同
    1、创建唯一约束会在Oracle中创建一个Constraint,同时也会创建一个该约束对应的唯一索引。
    2、创建唯一索引只会创建一个唯一索引,不会创建Constraint。也就是说其实唯一约束是通过创建唯一索引来实现的。
    在删除时这两者也有一定的区别:删除唯一约束时可以只删除约束而不删除对应的索引,所以对应的列还是必须唯一的,而删除了唯一索引的话就可以插入不唯一的值。

    目标

        接下来该干正事了,怎么创建联合索引保证唯一性!!!

    --示例表
    CREATE TABLE BIZ_PERSON(
      VARCHAR2(32) primary key ,
      NAME VARCHAR2(32) ,
      AGE  VARCHAR2(32)
    );
    
    --创建两个字段唯一索引,此时已能保证数据的唯一性
    CREATE UNIQUE INDEX UNIQUE_AGE_NAME ON 
    BIZ_PERSON(NVL2(NAME,AGE,NULL),NVL2(NAME,NAME,NULL));
    
    --如何查询当前表的索引和约束?
    --查询索引
    SELECT 
    b.uniqueness, 
    a.index_name, 
    a.table_name, 
    a.column_name 
    FROM all_ind_columns a, all_indexes b
    WHERE a.index_name=b.index_name AND a.table_name = upper('BIZ_PERSON')
    --查询约束
    SELECT * FROM all_constraints WHERE table_name='BIZ_PERSON';
     
    --删除 唯一索引
    drop index UNIQUE_AGE_NAME;
    --删除 唯一约束
    ALTER TABLE BIZ_PERSON DROP CONSTRAINT 约束名称;
     

    知识点扩展

    NULL指的是空值,或者非法值。
    NVL (expr1, expr2)->expr1为NULL,返回expr2;不为NULL,返回expr1。注意两者的类型要一致
    NVL2 (expr1, expr2, expr3) ->expr1不为NULL,返回expr2;为NULL,返回expr3。expr2和expr3类型不同的话,expr3会转换为expr2的类型
    NULLIF (expr1, expr2) ->相等返回NULL,不等返回expr1

    参考资料

    唯一索引_百度百科 (baidu.com)   

    唯一约束_百度百科 (baidu.com)                                                  

    (3条消息) oracle的联合约束(多个字段的唯一性)_sqiucheng的专栏-CSDN博客

       

        

    展开全文
  • oracle唯一索引

    2022-04-12 11:22:47
    为NULL的字段可以设置唯一索引 1:多条字段为NULL的记录,可以正常插入数据库中 2:重复值插入会正常校验重复值 Tips:设置字符串null也是会校验重复值 测试3770条NULL值记录,一条有值的记录。单独查询这个...
  • 当where子句对某一列使用函数时,除非利用这个简单的技术强制索引,否则Oracle优化器不能在查询中使用索引。通常情况下,如果在WHERE子句中不使用诸如UPPER、REPLACE或SUBSTRD等函数,就不能对指定列建立特定的条件...
  • ORACLE创建唯一索引

    千次阅读 2020-05-12 18:34:45
    oracle创建唯一索引 Create UNIQUE Index PK_INSTANCE_ID on TB_DD_APPROVAL_OUT ( INSTANCE_ID ) oracle基于多列的唯一性约束 alter table tb_products add constraint tb_products_u1 unique (product_id,product_...
  • oracle新增、删除索引以及主键修改

    千次阅读 2020-03-03 17:19:28
    --根据索引名,查询表索引字段 select * from user_ind_columns where index_name='索引名'; --根据表名,查询一张表的索引 select * from user_indexes where table_name='表名'; --根据索引名,查询属于哪张表 ...
  • 转:首先,在大多数情况下,复合索引比单字段索引好.以税务系统的SB_ZSXX(申报类_征收信息表)为例,该表为税务系统最大的交易表.如果分别按纳税人识别号,税务机关代码,月份3个字段查询,每个字段在该表中的可选性或约束...
  • 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数据库操作中,为什么有时一个表的某个字段明明有索引,当观察一些语的执行计划确不走索引呢?如何解决呢?本文我们主要介绍这部分内容,接下来让我们一起来了解一下。  不走索引大体有以下几个原因: ...
  • oracle中多个字段组成唯一索引约束

    千次阅读 2018-11-26 18:59:02
    已经验证!!!欢迎相互学习交流 --原来EXPENSE_ITEM_CODE, EXPENSE_TYPE_CODE, EXP_REPORT_TYPE_CODE这三个为唯一索引...注意事项(报错dupplicate keys found,若表中要创建的唯一索引约束的四个字段在数据库该表...
  • 最近遇到一个Oracle SQL语句的性能问题,修改功能之前的运行时间平均为0.3s,可是添加新功能后,时间达到了4~5s。虽然几张表的数据量都比较大(都在百万级以上),但是也都有正确创建索引,不知道到底慢在了哪里,...
  • Oracle 创建唯一索引和非唯一索引

    千次阅读 2020-03-03 17:02:01
    唯一索引 生产环境已经存在且数据量不大的表 CREATE index "索引名" on "表名"("字段名") tablespace "表空间名" online; 举例: CREATE index IDX_WF_ORDER_CREATE_TIME on WF_ORDER(CREATE_TIME) tablespace ...
  • oracle唯一索引

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

    千次阅读 2019-11-04 14:15:04
    CREATE INDEX 索引名称自己起得 ON 表名(字段名); 再添加唯一键 ALTER TABLE 表名 ADD CONSTRAINT 唯一键名称自己起得UNIQUE(字段名) ENABLE NOVALIDATE; 索引的作用是增加查询速度 唯一键的作用是防止字段...
  • Oracle索引建立原则  · 确定针对该表的操作是大量的查询操作还是大量的增删改操作。  · 尝试建立索引来帮助特定的查询。检查自己的sql语句,为那些频繁在where子句中出现的字段建立索引。  · where语句中...
  • 1、年字段唯一索引,相当于主键id,不允许任何重复年份。 2、届次做复合索引,相同的届值只能对应不重复的次。比如可以是:十二届第一次、十二届第二次、十二届第三次,不能出现两个十二届第二次什么的(具体参照...
  • 在navicat(mysql版)里,我可以给表中的字段加索引,索引的作用就是,当我修改索引字段值的时候,引用索引的字段值会自动更新.那么问题来了,plSql里有这种功能吗?或者说Oracle的管理工具里面有没有类似的功能? 举个例子来...
  • oracle 全文检索 oracle全文索引 多列字段检索,匹配多列字段搜索功能。
  • NULL 博文链接:https://hackpro.iteye.com/blog/1845366
  • 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 ...
  • 5.4.4 修改索引(1)

    千次阅读 2021-05-08 20:26:14
    5.4.4 修改索引(1)如果在创建好索引之后,发现索引的命名不符合命名规范,需要重命名,或者是索引在使用一段时间后,需要重建索引,可以使用ALTER INDEX语句。下面分别对几种常见的索引修改方式进行介绍。1.重命名...
  • 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 修改字段类型

    千次阅读 2021-03-09 17:04:05
    修改 Oracle 表中字段类型,在该字段存在值的情况下,会提示:ORA-01439:要更改数据类型,则要修改的列必须为空 这时就需要区分情况处理。 数据量比较小的时候,可以直接操作目标表。 重命名字段名,添加新字段,...
  • --根据索引名,查询表索引字段 select * from user_ind_columns where index_name='索引名'; --根据表名,查询一张表的索引 select * from user_indexes where table_name='表名'; 三、删除索引 drop ...
  • ORACLE数据库给字段索引

    千次阅读 2020-05-06 18:39:48
    --查看索引 select * from all_indexes where table_name = '表名(大写)'; --查看索引和列名 select* from all_ind_columns where table_name = '表名(大写)'; --增加索引 create index I_IC_HANDRESERVE_...
  • 主键(primary key)是表中的一个或多个字段,它的值用于唯一地标识表中的某一条记录,在...oracle中创建主键后会自动生成一个唯一索引,并且该唯一索引可以在user_indexes视图中查到。创建两张表结构相同的表,test_1...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 121,681
精华内容 48,672
关键字:

oracle修改唯一索引字段