日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

gbase oracle mysql_项目从Oracle数据迁移到GBase数据库时解决适配遇到的问题

發布時間:2023/12/9 数据库 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 gbase oracle mysql_项目从Oracle数据迁移到GBase数据库时解决适配遇到的问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

@

一,oracle中nvl()函數

NVL(表達式1,表達式2)

如果表達式1為空值,NVL返回值為表達式2的值,否則返回表達式1的值。該函數的目的是把一個空值(null)轉換成一個實際的值。其表達式的值可以是數字型、字符型和日期型。但是表達式1和表達式2的數據類型必須為同一個類型。

二,oracle數據庫中sql語句中with as 的用法

相當于建了個e臨時表

with e as (select * from scott.emp e where e.empno=7499)

select * from e;

三,Oracle中的group by問題

這條查詢語句最后的group by在oracle數據庫中可以那樣寫,但是在gbase中不可以,因為上面已經把happen_time這個時間起了別名了,oracle數據庫中,group by后面不能跟別名,gbase只能寫別名,gbase只認識上面已經起了別名的名字。

適配gbase正確語句:

select to_char(happen_time,'yyyy-MM-dd') as happen_date,count(1) as cn from dy_work_reminder a

where a.dm_entry_person = '1'

and to_char(a.happen_time,'yyyy-MM')='2019-06'

and a.yxbz='Y' group by happen_date

四,trunc()的用法

在oracle中,trunc()的用法

1.select trunc(sysdate) from dual --2011-3-18 今天的日期為2011-3-18

2.select trunc(sysdate, 'mm') from dual --2011-3-1 返回當月第一天.

3.select trunc(sysdate,'yy') from dual --2011-1-1 返回當年第一天

4.select trunc(sysdate,'dd') from dual --2011-3-18 返回當前年月日

5.select trunc(sysdate,'yyyy') from dual --2011-1-1 返回當年第一天

6.select trunc(sysdate,'d') from dual --2011-3-13 (星期天)返回當前星期的第一天

7.select trunc(sysdate, 'hh') from dual --2011-3-18 14:00:00 當前時間為14:41

8.select trunc(sysdate, 'mi') from dual --2011-3-18 14:41:00 TRUNC()函數沒有秒的精確

Oracle獲取當前月份的第一天的sql語句

select trunc(sysdate, 'mm') from dual;

Gbase獲取當前月份的第一天的sql語句

select trunc(current,'month') from sysmaster:sysdual;

注意:oracle中的dual是虛擬表,而gbase中的sysmaster:sysdual表同樣是gbase的虛表。

五,批量插入

oracle批量插入

接口

int insterZqyjList(List zqyjList);

xml

insert into YZSYLGK_ZQYJ (YJ_ID, ID, YJ_NR,

TCR_NAME, TCRDW, CREATEDATE,

MODIFYDATE, USER_ID, ORG_ID

) select a.* from(

select #{item.yjId,jdbcType=VARCHAR}, #{item.id,jdbcType=VARCHAR}, #{item.yjNr,jdbcType=VARCHAR},

#{item.tcrName,jdbcType=VARCHAR}, #{item.tcrdw,jdbcType=VARCHAR}, #{item.createdate,jdbcType=TIMESTAMP},

#{item.modifydate,jdbcType=TIMESTAMP}, #{item.userId,jdbcType=VARCHAR}, #{item.orgId,jdbcType=VARCHAR} from dual

)a

適配GBase寫法

insert into YZSYLGK_ZQYJ (YJ_ID, ID, YJ_NR,

TCR_NAME, TCRDW, CREATEDATE,

MODIFYDATE, USER_ID, ORG_ID

) select a.* from(

select '${item.yjId}' as YJ_ID, '${item.id}' as ID, '${item.yjNr}' as YJ_NR,

'${item.tcrName}'as TCR_NAME, '${item.tcrdw}' as TCRDW,

get_datetime('${item.createdate}') as CREATEDATE

'' as CREATEDATE,

get_datetime('${item.modifydate}') as MODIFYDATE,

'' as MODIFYDATE,

'${item.userId}' as USER_ID, '${item.orgId}' as ORG_ID from dual

)a

Choose / when / otherwise是為了保證入參不為空,如果為空則前后插入的數量不匹配報錯,如果為空則返回空字符串。

(知識點)Oracle批量更新

xml寫法如下

update T_CITY_INDEX t

set

t.city_name= #{item.cityName,jdbcType=VARCHAR} ,

t.district_name= #{item.districtName,jdbcType=VARCHAR} ,

where t.id = #{item.id,jdbcType=NUMERIC}

六,Oracle數據庫和GBase數據庫的差異

Oracle數據庫和GBase數據庫的差異如下:

6.1 <=

Oracle:#{starttime}<=t.audit

Gbase:#{starttime}year to function(5)<=t.audit

6.2、groupby

Oracle:group by to_char(sysdate,’yyyy-MM’)

Gbase:group by 后面不能直接跟to_char(sysdate,’yyyy-MM’),需要先給

to_char起一個別名例如a,然后group b ya

6.3、with別名as

Oracle:在oracle數據庫中可以使用with別名as的用法,相當于建了一張臨時

表,例如

with tmp as(select * from test)

Selecta.test1,b.test2 from try a,tmp b where a.id=b.id

GBase:在GBase中不可以使用with別名as的用法,只能這樣寫

Selecta.test1,b.test2 from try a,(select * from test) b where a.id=b.id

6.4、to_char()

Oracle:select to_char(a.id) id from...

GBase:select ‘a.id’ id from...

6.5、批量插入

Oracle:在foreach標簽中接收yjId參數時是這樣接收的

{item.yjId,jdbcType=VARCHAR}

GBase:在foreach標簽中接受yjId參數時是這樣接收的

'${item.yjId}' as YJ_ID

注意:這里有一對單引號

6.6、sysdate和current

Oracle:查詢當前時間使用sysdate Select sysdate from dual;

GBase:查詢當前時間使用current Select current from sysmaster:sysdual;

(sysmaster:sysdual是GBase的虛表)

6.7、多表連接

Oracle:可以使用(+)來連接各個表

GBase:不支持(+)用法,可以使用左連接leftjoin..on..來作連接查詢。

6.8、當前時間now()和current

Oracle:小于當前時間的寫法:<=now()

GBase:小于當前時間的寫法:<=current

6.9、trunc()函數

Oracle:trunc(sysdate)獲取當前的日期

GBase:trunc(current year to fraction(5))

七,多表連接

oracle的寫法

select a.title,a.begintime,null as END_DATE ,a.compere,a.org_id,a.typeid,a.id,a.xindeandbiji,a.meeting_type,c.org_name,le.STATE,

le.xdbgid,bj.STATE bjzt,bj.xdbgid bjid,d.ztdrlx,d.themetype,

b.user_id,a.recuserid,a.hyjy_state,null as bmzt,null as fczs_id

from meeting_main a,meeting_user b,g_organ c,meeting_ztdr d,LEARNING_NOTES le,LEARNING_NOTES bj

where a.org_id=c.org_id

and a.id = b.mainid

and a.id = d.id

and a.id = le.PROJECTID(+)

and a.id = bj.PROJECTID(+)

and le.type(+) = '0'

and bj.type(+) = '1'

and b.user_id = #{userId,jdbcType=VARCHAR}

gbase的(+)不適配,需要統統都改成left join 表名 on 條件

gbase的寫法

select a.title,a.begintime,null as END_DATE ,a.compere,a.org_id,a.typeid,a.id,a.xindeandbiji,a.meeting_type,c.org_name,le.STATE,

le.xdbgid,bj.STATE bjzt,bj.xdbgid bjid,d.ztdrlx,d.themetype,

b.user_id,a.recuserid,a.hyjy_state,null as bmzt,null as fczs_id

from

meeting_main a left join meeting_user b on

a.id = b.mainid left join g_organ c on

a.org_id = c.org_id left join meeting_ztdr d on

a.id = d.id left join LEARNING_NOTES le on

a.id = le.PROJECTID left join LEARNING_NOTES bj on

a.id = bj.PROJECTID

where

b.user_id = '1'

八,XMLAGG函數

oracle的寫法

select substr(aorgid,0,length(aorgid)-1) aorgid,substr(aorg_name,0,length(aorg_name)-1) aorg_name from (

select XMLAGG(XMLELEMENT(E,orgid || ',')).EXTRACT('//text()').getclobval() aorgid,

XMLAGG(XMLELEMENT(E,org.org_name || ',')).EXTRACT('//text()').getclobval() aorg_name

from exam_exam_org b,g_organ org where b.orgid=org.org_id

and b.exid=#{exid,jdbcType=VARCHAR}

) a

gbase的寫法

select substr(aorgid,0,length(aorgid)-1) aorgid,substr(aorg_name,0,length(aorg_name)-1) aorg_name from (

select WM_concat(orgid) aorgid,

WM_concat(org.org_name) aorg_name

from exam_exam_org b,g_organ org where b.orgid=org.org_id

and b.exid=#{exid,jdbcType=VARCHAR}

) a

九,to_char()用法

oracle的寫法

SELECT

to_char(a.id) id,

a.SCOREPROJECT,

b.USERID,

to_char(b.score) score,

to_char(a.SCORESUM) scoresum

FROM

score_ruler a,

( SELECT USERID, SCOREPROJECTID, sum( score ) score FROM SCORE_LOG WHERE USERID = #{userid,jdbcType=VARCHAR} GROUP BY USERID, SCOREPROJECTID ) b

WHERE

a.ID = b.SCOREPROJECTID ( + )

gbase的寫法

SELECT

'a.id' id,

a.SCOREPROJECT,

b.USERID,

'b.score' score,

'a.SCORESUM' scoresum

FROM

score_ruler a,

( SELECT USERID, SCOREPROJECTID, sum( score ) score FROM SCORE_LOG WHERE USERID = #{userid,jdbcType=VARCHAR} GROUP BY USERID, SCOREPROJECTID ) b

WHERE

a.ID = b.SCOREPROJECTID ( + )

十,查看當前月份trunc( )函數

oracle的寫法

select trunc(sysdate,'mm') from dual;

gbase的寫法

select trunc(current year to fraction(5),'month') from dual;

十一,group by

oracle寫法

resultType="cn.com.qianlong.light.vo.dy.DyTjCxVo">

SELECT BB.name,nvl(AA.value,'0')value

FROM

(SELECT

CASE

WHEN TO_CHAR(z.ybdybeginDate,'YYYYMMDD') <= '19490930' THEN '1949之前'

WHEN TO_CHAR(z.ybdybeginDate,'YYYYMMDD') >= '19491001'

AND TO_CHAR(z.ybdybeginDate,'YYYYMMDD') <= '19660430' THEN '1949~1966'

WHEN TO_CHAR(z.ybdybeginDate,'YYYYMMDD') >= '19660501'

AND TO_CHAR(z.ybdybeginDate,'YYYYMMDD') <= '19761031' THEN '1966~1976'

WHEN TO_CHAR(z.ybdybeginDate,'YYYYMMDD') >= '19761101'

AND TO_CHAR(z.ybdybeginDate,'YYYYMMDD') <= '19781231' THEN '1976~1978'

WHEN TO_CHAR(z.ybdybeginDate,'YYYYMMDD') >= '19790101'

AND TO_CHAR(z.ybdybeginDate,'YYYYMMDD') <= '20021031' THEN '1979~2002'

WHEN TO_CHAR(z.ybdybeginDate,'YYYYMMDD') >= '20021101'

AND TO_CHAR(z.ybdybeginDate,'YYYYMMDD') <= '20121031' THEN '2002~2012'

WHEN TO_CHAR(z.ybdybeginDate,'YYYYMMDD') >= '20121101' THEN '2012之后'

END as name , COUNT(z.ybdybeginDate) AS value

FROM (

SELECT a.user_id, a.ybdybeginDate, a.partyorganId FROM DY_INFO a,G_ORGAN b

where

a.PARTYORGANID like CONCAT('%',CONCAT(#{partyorganid,jdbcType=VARCHAR},'%'))

and a.status IN (1,4)

AND a.userType IN (4, 5)

AND

a.PARTYORGANID=b.ORG_ID

and

b.VALIDFLAG = 1

) z

GROUP BY CASE

WHEN TO_CHAR(z.ybdybeginDate,'YYYYMMDD') <= '19490930' THEN '1949之前'

WHEN TO_CHAR(z.ybdybeginDate,'YYYYMMDD') >= '19491001'

AND TO_CHAR(z.ybdybeginDate,'YYYYMMDD') <= '19660430' THEN '1949~1966'

WHEN TO_CHAR(z.ybdybeginDate,'YYYYMMDD') >= '19660501'

AND TO_CHAR(z.ybdybeginDate,'YYYYMMDD') <= '19761031' THEN '1966~1976'

WHEN TO_CHAR(z.ybdybeginDate,'YYYYMMDD') >= '19761101'

AND TO_CHAR(z.ybdybeginDate,'YYYYMMDD') <= '19781231' THEN '1976~1978'

WHEN TO_CHAR(z.ybdybeginDate,'YYYYMMDD') >= '19790101'

AND TO_CHAR(z.ybdybeginDate,'YYYYMMDD') <= '20021031' THEN '1979~2002'

WHEN TO_CHAR(z.ybdybeginDate,'YYYYMMDD') >= '20021101'

AND TO_CHAR(z.ybdybeginDate,'YYYYMMDD') <= '20121031' THEN '2002~2012'

WHEN TO_CHAR(z.ybdybeginDate,'YYYYMMDD') >= '20121101' THEN '2012之后'

END

)AA RIGHT JOIN (

select '1949之前' as name, '1' as xh from dual

union

select '1949~1966' as name, '2' as xh from dual

union

select '1966~1976' as name, '3' as xh from dual

union

select '1976~1978' as name, '4' as xh from dual

union

select '1979~2002' as name, '5' as xh from dual

union

select '2002~2012' as name, '6' as xh from dual

union

select '2012之后' as name, '7' as xh from dual

)BB on AA.name=BB.name

ORDER BY BB.xh

gbase寫法

resultType="cn.com.qianlong.light.vo.dy.DyTjCxVo">

SELECT BB.name,nvl(AA.value,'0')value

FROM

(SELECT

CASE

WHEN TO_CHAR(z.ybdybeginDate,'YYYYMMDD') <= '19490930' THEN '1949之前'

WHEN TO_CHAR(z.ybdybeginDate,'YYYYMMDD') >= '19491001'

AND TO_CHAR(z.ybdybeginDate,'YYYYMMDD') <= '19660430' THEN '1949~1966'

WHEN TO_CHAR(z.ybdybeginDate,'YYYYMMDD') >= '19660501'

AND TO_CHAR(z.ybdybeginDate,'YYYYMMDD') <= '19761031' THEN '1966~1976'

WHEN TO_CHAR(z.ybdybeginDate,'YYYYMMDD') >= '19761101'

AND TO_CHAR(z.ybdybeginDate,'YYYYMMDD') <= '19781231' THEN '1976~1978'

WHEN TO_CHAR(z.ybdybeginDate,'YYYYMMDD') >= '19790101'

AND TO_CHAR(z.ybdybeginDate,'YYYYMMDD') <= '20021031' THEN '1979~2002'

WHEN TO_CHAR(z.ybdybeginDate,'YYYYMMDD') >= '20021101'

AND TO_CHAR(z.ybdybeginDate,'YYYYMMDD') <= '20121031' THEN '2002~2012'

WHEN TO_CHAR(z.ybdybeginDate,'YYYYMMDD') >= '20121101' THEN '2012之后'

END as dd , COUNT(z.ybdybeginDate) AS value

FROM (

SELECT a.user_id, a.ybdybeginDate, a.partyorganId FROM DY_INFO a,G_ORGAN b

where

a.PARTYORGANID like CONCAT('%',CONCAT(#{partyorganid,jdbcType=VARCHAR},'%'))

and a.status IN (1,4)

AND a.userType IN (4, 5)

AND

a.PARTYORGANID=b.ORG_ID

and

b.VALIDFLAG = 1

) z

GROUP BY dd

)AA RIGHT JOIN (

select '1949之前' as name, '1' as xh from dual

union

select '1949~1966' as name, '2' as xh from dual

union

select '1966~1976' as name, '3' as xh from dual

union

select '1976~1978' as name, '4' as xh from dual

union

select '1979~2002' as name, '5' as xh from dual

union

select '2002~2012' as name, '6' as xh from dual

union

select '2012之后' as name, '7' as xh from dual

)BB on AA.name=BB.name

ORDER BY BB.xh

十二,查看當前星期的星期一的日期

oracle寫法

select trunc(sysdate,'iw') from dual;

gbase寫法

select trunc(current,'day')+1 from dual;

參考gbase官方文檔

總結

以上是生活随笔為你收集整理的gbase oracle mysql_项目从Oracle数据迁移到GBase数据库时解决适配遇到的问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。