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

歡迎訪問 生活随笔!

生活随笔

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

数据库

Javamysql语法转化oracle_MySQL与Oracle的语法区别详细对比

發布時間:2025/3/11 数据库 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Javamysql语法转化oracle_MySQL与Oracle的语法区别详细对比 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Oracle和mysql的一些簡單命令對比

1) SQL> select to_char(sysdate,'yyyy-mm-dd') from dual;

SQL> select to_char(sysdate,'hh24-mi-ss') from dual;

mysql> select date_format(now(),'%Y-%m-%d');

mysql> select time_format(now(),'%H-%i-%S');

日期函數

增加一個月:

SQL> select to_char(add_months(to_date ('20000101','yyyymmdd'),1),'yyyy-mm-dd') from dual;

結果:2000-02-01

SQL> select to_char(add_months(to_date('20000101','yyyymmdd'),5),'yyyy-mm-dd') from dual;

結果:2000-06-01

mysql> select date_add('2000-01-01',interval 1 month);

結果:2000-02-01

mysql> select date_add('2000-01-01',interval 5 month);

結果:2000-06-01

截取字符串:

SQL> select substr('abcdefg',1,5) from dual;

SQL> select substrb('abcdefg',1,5) from dual;

結果:abcdemysql> select substring('abcdefg',2,3);

結果:bcd

mysql> select mid('abcdefg',2,3);

結果:bcd

mysql> select substring('abcdefg',2);

結果:bcdefg

mysql> select substring('abcdefg' from 2);

結果:bcdefg

2) 在MySQL中from 后的表如果是(select.......)這種,那么后面必須有別名

3) 連接字符串在Oracle中用|| ,SqlServer中用+,MySQL中用concat('a','b','c')

4)

在SqlServer中的寫法:

declare @id varchar(50);

set @id='4028e4962c3df257012c3df3b4850001';

select * from sims_sample_detect where ID= @id;

在MySQL中的寫法:

set @a = 189;

select * from bc_article where id = @a //不用declare

在Orcale中的寫法:

5)MySQL存儲過程:

DELIMITER $$

DROP PROCEDURE IF EXISTS `SIMS`.`transaction_delSampleInfo`$$

CREATE DEFINER=`root`@`%` PROCEDURE `transaction_delSampleInfo`(in sampleInfoId varchar(50))

BEGIN

start transaction;

update sims_sample_info set del='1' where ID = sampleInfoId;

update sims_sample_detect set del='1' where SAMPLE_ID_PARENT = sampleInfoId;

update sims_sample_detect_info set del='1' where DETECT_ID in(

select ID from sims_sample_detect where SAMPLE_ID_PARENT = sampleInfoId

);

commit;

END$$

DELIMITER ;

變量名不能跟列名相同,否則效果為1=1,且MySQL不區分大小寫。

6)mysql 游標

mysql沒有像orcale的動態游標,只有顯示游標,例子如下:

DELIMITER $$

DROP PROCEDURE IF EXISTS `test`.`liyukun`$$

CREATE DEFINER=`ids`@`localhost` PROCEDURE `liyukun`(out z int)

BEGIN

declare count1 int;

DECLARE done INT DEFAULT 0;

declare v_haoma varchar(50);

declare v_yingyeting varchar(100);

DECLARE cur1 CURSOR FOR select haoma,yingyeting from eryue where id<2;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;

//這里和oracle有區別,Oracle的PL/SQL的指針有個隱性變

量%notfound,Mysql是通過一個Error handler的聲明來進行判斷的

OPEN cur1;

cur1: LOOP

FETCH cur1 INTO v_haoma,v_yingyeting;

IF done=1 THEN //如果沒有數據了,則離開

LEAVE cur1;

ELSE

select count(*) into count1 from year2012 where haoma=v_haoma ;

if(count1=0) then

insert into year2012(haoma, yingyeting)

values(v_haoma,v_yingyeting);

else

set z = z+1;

update year2012 set eryue = ‘100' where haoma=v_haoma;

end if;

END IF;

END LOOP cur1;

CLOSE cur1;

END$$

DELIMITER ;

執行:

call liyukun(@a);

select @a;

7) mysql的group by 語句可以select 沒有被分組的字段,如

select id,name,age from A group by age 這樣

但是在orcale和sqlserver中是會報錯的。這個取出的id,name所在的行是每個分組中的第一行數據。

8)orcale用decode()來轉換數據,mysql,sqlserver用case when:

case t.DETECT_RESULT when '2402' then t.SAMPLEID end (必須有end)

9)mysql: 兩個select 出的數據相減:

(COUNT(distinct(t.SAMPLEID))-

CONVERT((COUNT(distinct(case t.DETECT_RESULT when '2402' then t.SAMPLEID end))), SIGNED)) AS NEGATIVE

FROM `view_sims_for_report` t

10)convert,cast用法

mysql將varchar轉為int

convert(字段名, SIGNED)

字符集轉換 : CONVERT(xxx USING gb2312)

類型轉換和SQL Server一樣,就是類型參數有點不同 : CAST(xxx AS 類型) , CONVERT(xxx,類型)

可用的類型

二進制,同帶binary前綴的效果 : BINARY

字符型,可帶參數 : CHAR()

日期 : DATE

時間: TIME

日期時間型 : DATETIME

浮點數 : DECIMAL

整數 : SIGNED

無符號整數 : UNSIGNED

11)如果從mysql數據庫中取的時候沒有亂碼,而在Java的List中得到的是亂碼的話,那么可能是SQL語句中的有字段不是 varchar的數據類型,這時需要轉換convert(字段名, 類型)轉換一下,Orcale則用ToChar函數

12)Orcale的大字段用clob,圖像用blob,clob字段在Hibernate的映射文件中用String就可以

13) mysql,orcale,sqlserver 語句執行順序

開始->FROM子句->WHERE子句->GROUP BY子句->HAVING子句->ORDER BY子句->SELECT子句->LIMIT子句->最終結果

每個子句執行后都會產生一個中間結果 ,供接下來的子句使用,如果不存在某個子句,就跳過。

14) LPAD函數

1在oracle的數據庫里有個函數 LPAD(String a,int length,String addString).

2作用:把addString添加到a的左邊,length 是返回值的長度。

3例子

A : SQL> select lpad('test',8,0) from dual;

LPAD('TEST',8,0)

----------------

0000test

B: select lpad('test',8) from dual;

LPAD('TEST',8)

--------------

test 注:不寫最后一個參數,函數會默認在返回值左邊加一個空格。

C: SQL> select lpad('test',2,0) from dual;

LPAD('TEST',2,0)

----------------

te

D:SQL> select lpad('test',3) from dual;

LPAD('TEST',3)

--------------

tes

15)Orcale中沒有TOP,是通過

select * from (select * from A order by id desc) where rownum=1

注:不能直接寫 select * from A where rownum=1 order by id desc 因為語句執行的順序是先where再order by ,如果這樣寫就無法按id的排序來取第一個了。

不能寫rownum=2或rownum>1這樣,因為Orcale 默認必須包含第一條。

如果非要取第二條的話,可以寫成:

select * from (select id,rownum as row_num from lws_q_bl_result r where r.sample_id = 'B10226072') where row_num=2

16)Orcale,MySql while循環比較

Orcale:

while num<10

loop

str := to_char(num);

num := num+1;

end loop;

也可以:

for num in 1..10 --這樣的缺陷是無法間隔取值

loop

str := to_char(num);

end loop;

mysql:

while num<10

do

str := to_char(num);

num := num+1;

end while;

17)orcale 生成唯一序列是 select sys.guid() from dual ,mysql是 select uuid() from dual

18)MySql和Orcale的ID自增

MySql由于是在數據庫中實現ID自增,所以如果想返回插入一條序列的該條ID,只能用如下方法:

public int insertSign(final SpaceSign sign) throws Exception {

try{

KeyHolder keyHolder = new GeneratedKeyHolder();

final String sql = "insert into space_sign(userId,userName,nickName,contentText,contentHtml,isPublic,commentCount,userIp,status,insertTime)" +

" values(?,?,?,?,?,?,?,?,?,?)";

template.update(new PreparedStatementCreator() {

public PreparedStatement createPreparedStatement(Connection connection) throws SQLException {

PreparedStatement ps = connection.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);

ps.setInt(1, sign.getUserId());

ps.setString(2, sign.getUserName());

ps.setString(3, sign.getNickName());

ps.setString(4, sign.getContentText());

ps.setString(5, sign.getContentHtml());

ps.setInt(6, sign.getIsPublic());

ps.setInt(7,sign.getCommnetCount());

ps.setString(8, sign.getUserIp());

ps.setInt(9, sign.getStatus());

ps.setTimestamp(10, new java.sql.Timestamp(sign.getInsertTime().getTime()));

return ps;

}

}, keyHolder);

Long generatedId = keyHolder.getKey().longValue();

return generatedId.intValue();

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

throw new SQLException("發表簽名失敗", e);

}

}

由于Orcale的ID是在插入該條數據之前就通過select SEQ_BLOG_ID.nextval from dual 獲得的,所以直接返回既可。ps:SEQ_BLOG_ID為在數據庫中設置的sequence。

總結

以上是生活随笔為你收集整理的Javamysql语法转化oracle_MySQL与Oracle的语法区别详细对比的全部內容,希望文章能夠幫你解決所遇到的問題。

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