oracle数据库 自增长及批量处理数据

数据库对象命名规范

数据库对象包括表、视图(查询)、存储过程(参数查询)、函数、约束。对象名字由前缀和实际名字组成,长度不超过30。
1)前缀:
使用小写字母。如:
表(Table) tb_
字段(Column)
主键(Primary key) pk_
外键(Foreign key) fk_
Check约束(Check Constraint) ck_
Default 约束(Default Constraint) df_
视图(View) vi_
索引(Index) idx_
存储过程(Stored procedure) sp_
用户定义函数 (User-defined function) fn_
序列(Sequence) seq_
表空间(Tablespace) ts_
变量名(Variable) @
触发器(Trigger) tr_
2)实际名字:
实际名字尽量描述实体的内容,由单词或单词组合,每个单词的首字母大写,其他
字母小写,不以数字和_开头。如:
表 User_Info
视图 User_List
存储过程 User_Delete
3)示例:
合法的对象名字类似如下:
表 tb_User_Info tb_Message_Detail
视图 vi_Message_List
存储过程 sp_Message_Add

oracle 主键自增长

第一种方式:序列化+显示调用序列化。
第二种方式:序列化+触发器;
一:
第一步:创建序列sequence
(序列名格式要求 :序列(Sequence) seq_XXX )

//创建sequence
create sequence seq_on_table
increment by 1
start with 1
nomaxvalue
nocycle
nocache;

第二步:显示调用序列

insert into table values('001', '安保部', '000', 1, seq_on_test.nextval);

第三步:查询进行查看

select * from table 

数据库 给表格设置默认值 来显示调用序列化的值
oracle数据库 自增长及批量处理数据_第1张图片
bean.xml中使用序列化实现新增

	<insert id="addDevice">
		<selectKey keyProperty="vo.主键名" resultType="long"
			order="BEFORE">
			SELECT 序列名.nextval FROM DUAL
		selectKey>
		insert into
		表名(id,列名)
		values(#{vo.deviceId},#{vo.列名对应值})
	insert>

二:
第一步:创建序列sequence

create sequence SEQ_LOG_ID
minvalue 1  --增长最小值
maxvalue 9999999999  --增长最大值,也可以设置NOMAXvalue -- 不设置最大值
start with 101  --从101开始计数
increment by 1  --自增步长为1
cache 50  --设置缓存cache个序列,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置为---NOCACHE防止跳号
cycle;  --循环,当达到最大值时,不是从start with设置的值开始循环。而是从1开始循环

第二步:建立触发器
(命名格式:触发器(Trigger) tr_XXX )

create or replace trigger tr_test_id
  before insert on S_Depart   --defore在添加时触发S_Depart 是表名
  for each row  --行级触发器
declare
  nextid number;
begin
  IF :new.DepartId IS NULLor :new.DepartId=0 THEN --DepartId是列名
    select SEQ_ID.nextval --SEQ_ID正是刚才创建的
    into nextid
    from sys.dual;
    :new.DepartId:=nextid;
  end if;
end tr_test_id;

第三步:插入数据测试看主键是否自增

sql 查询分页

踩坑
1: *号 不能随便用,如果不同表名之间含有相同列名,则数据库无法查出数据。外层sql只是单纯继承内部时可用。
2:sql 有严格的空格 要求。
3:xml里最后一个值 后面不能接逗号 会报错
4:对传入的变量要进行判空处理,避免出现异常
5:数据库对列的值 有范围要求时 要写明在接口文档内
6:特殊字符要进行转义处理
7:数组对象要进行迭代
8:变量类型,和数据库类型不同是要进行声明处理

<foreach collection="devIdList" item="item" open=","
			separator=",">
			#{item}
		foreach>

查询分页sql
在已经查询出来的结果集合中按照特定范围进行嵌套查询 返回结果

<select id="getWorkOrdersPages" resultType="com.nw.hms.server.v2.vo.workOrder.WorkOrderVo">
		select t.work_order_id workOrderId,
		t.station_name stationName,
		t.station_id stationId,
		t.item_code itemCode,
		t.item_name itemName,
		t.dev_name deviceName,
		t.dev_id deviceId,
		t.dev_addr deviceAddr,
		t.maintenance_id maintenanceId,
		t.maintenance_name maintenanceName,
		t.maintenance_tel maintenanceTel,
		t.faultType_id faultTypeId,
		t.faultType_name faultTypeName,
		t.status status,
		t.created createTime,
		t.start_time startTime,
		t.finish_time finishTime,
		t.remarks remarks
		from
		(select rownum rowno, t9.*
		from (select t1.work_order_id,
		t2.station_name,
		t1.station_id,
		t1.item_code,
		t3.item_name,
		t4.dev_name,
		t4.dev_id,
		t4.dev_addr,
		t5.maintenance_id,
		t5.maintenance_name,
		t5.maintenance_tel,
		t6.faultType_id,
		t6.faultType_name,
		t1.status,
		t1.created,
		t1.start_time,
		t1.finish_time,
		t1.remarks
		from work_order t1
		inner join config_station t2
		on t2.id = t1.station_id
		inner join
		monitor_item t3
		on t3.item_code = t1.item_code
		inner join config_device
		t4
		on t4.dev_id = t1.dev_id
		inner join maintenance_info t5
		on
		t5.maintenance_id = t1.maintenance_id
		inner join fault_type t6
		on
		t6.faultType_id = t1.faultType_id
		where t1.user_id = #{vo.userId}
		and
		t1.faultType_id = #{vo.faultTypeId}
		<if test="vo.searchText != null and vo.searchText != ''">
			and (
			t2.station_name like
			'%'||#{vo.searchText,javaType=String,jdbcType=VARCHAR}||'%'
			or
			t3.item_name like '%'||
			#{vo.searchText,javaType=String,jdbcType=VARCHAR} ||'%'
			or t4.dev_id
			like '%'|| #{vo.searchText,javaType=String,jdbcType=VARCHAR}
			||'%'
			or
			t4.dev_name like '%'||
			#{vo.searchText,javaType=String,jdbcType=VARCHAR} ||'%'
			or t4.dev_addr
			like '%'||
			#{vo.searchText,javaType=String,jdbcType=VARCHAR} ||'%'
			or
			t5.maintenance_name like '%'||
			#{vo.searchText,javaType=String,jdbcType=VARCHAR} ||'%'
			or
			t6.faultType_name like '%'||
			#{vo.searchText,javaType=String,jdbcType=VARCHAR} ||'%'
			or t1.status
			like '%'|| #{vo.searchText,javaType=String,jdbcType=VARCHAR}
			||'%'
			)
		if>
		) t9) t
		where t.rowno ]]>
		#{vo.start}
		and t.rowno 
		#{vo.end}
	

批量处理数据

新增1

<insert id="addRoleObjRef">
    <if test="roleIds.size != 0">
    insert all
    <foreach collection="roleIds" item="item" separator=",">
    into sys_role_obj_ref(role_id,obj_id,obj_type)
    values(#{item},#{objId},#{objType})
    foreach>
    select 1 from dual
    if>
    insert>

新增2

<insert id="addUserSelectAreas" parameterType="java.util.ArrayList"  useGeneratedKeys="false">
		insert into user_select_area(
		id,
		user_id,
		type_id,
		area_id
		) SELECT SEQ_USER_SELECT_AREA.nextval,a.user_id,a.type_id,a.area_id FROM (
		 <foreach collection="voList" item="vo" separator="union all">
           SELECT
		#{vo.userId,jdbcType=NUMERIC} user_id,
		#{vo.typeId,jdbcType=NUMERIC} type_id,
		#{vo.areaId,jdbcType=NUMERIC} area_id
		  FROM dual
        foreach>
		) a
	insert>

删除

	<delete id="delUserSelectAreas">
    delete from user_select_area
    where  1=1
     
    <if test="idList != null and idList.size > 0 ">
			and id in
			 <foreach collection="idList" item="id" index="index" open="(" close=")" separator=",">
                 #{id}
           foreach>
		if>
    delete>

无主键自增长

<insert id="saveBatchWorkOrder" parameterType="java.util.ArrayList"  useGeneratedKeys="false" >
			insert into work_order(
			user_id,
			station_id,
			item_code,
			dev_id,
			maintenance_id,
			faultType_id,
			remarks,
			status) 	
			  <foreach collection="reqWOList" item="vo" separator="union all">
           select
			  #{vo.userId,jdbcType=NUMERIC} user_id,
			  #{vo.stationId,jdbcType=NUMERIC} type_id,
			  #{vo.itemCode} item_code,
			  #{vo.deviceId } dev_id,
			  #{vo.maintenanceId, jdbcType=NUMERIC} MAINTENANCE_ID,
			  #{vo.faultTypeId ,jdbcType=NUMERIC} faultType_id,
			  #{vo.remarks} remarks,
			  #{vo.status} status
			  from  dual
	       </foreach>
		</insert>

你可能感兴趣的:(数据库,数据库,oracle,触发器)