oracle資料庫 自增長及批量處理資料
阿新 • • 發佈:2021-02-05
資料庫物件命名規範
資料庫物件包括表、檢視(查詢)、儲存過程(引數查詢)、函式、約束。物件名字由字首和實際名字組成,長度不超過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_
表空間(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
資料庫 給表格設定預設值 來顯示呼叫序列化的值
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 <![CDATA[>]]>
#{vo.start}
and t.rowno <![CDATA[<=]]>
#{vo.end}
</select
批量處理資料
新增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>