sql Sever的預存程序轉換為mysql的

來源:互聯網
上載者:User

標籤:

總體來說,sql sever和Mysql的預存程序的思路都是一樣的,但是在文法和結構上還是有很大的區別的。
1. 在mysql中寫預存程序所有的dbo都要去掉。
2. 每一個sql語句後面都需要加上;否則報錯;
4. 再說參數,在MSSQL中我們一般會這麼定義參數

CREATE PROCEDURE PROC_ST(@operator varchar(300),@ProcDate datetime,@ErrorLog varchar(8000) OUTPUT)

但是在mysql中這種格式是不可以的;
首先在mysql中輸入參數是in來表示,輸出參數是out表示,如果不寫,預設是in,其次在mysql中是沒有@符號的,所以所有的@符號都要去掉
上述預存程序改寫成mysql的話

 

create PROCEDURE PROC_ST(in operator varchar(300),in ProcDate datetime, out ErrorLog varchar(8000) )

 

5.關於時間的問題
5.1 擷取時間格式
在MSSQL中我們來擷取時間一般用CONVERT來表示,例如

[email protected] = CONVERT(varchar(6),@ProcDate,112);

 

這句話的意思就是擷取時間的年月並且格式是yyyymm的,112代表的是一種格式;

但是在mysql中我修改的時候卻一直報錯,所以我換了一種寫法

year(now())*100+month(now())

這樣就可以了;
5.2
轉換時間格式
同樣的,在MSSQL中用CONVERT(varchar(6),參數,112) = @YearMonth 就可以使用,但是在MYSQL中我用的是cast強制轉換才可以

CAST(REP.FACT_DATE AS CHAR(6) )

 

6.

關於if的使用
在MSSQL中用
If()
Begin
程式片段
End
Else
Begin
程式片段
End就可以;
但是在Mysql中是不認的,if的後面必須有then,而且每一個else if的後面必須有;作為結束符號,否則不管你怎麼調試也是過不去的
下面的是我改寫的一個函數,比較簡單,主要是比較一下文法

CREATE FUNCTIONLOAN_PERIOD(begindate int,enddate int)RETURNSvarchar(8000)BEGINif(enddate-begindate <= ‘3‘)then return ‘10‘;end if;if(enddate-begindate>‘3‘ andenddate-begindate <= ‘6‘)then return ‘20‘;end if;if(enddate-begindate>‘6‘ andenddate-begindate <= ‘12‘) then return ‘30‘;end if;return ‘40‘;END

7.關於在時間的增加或者減少
我們一般在MSSQL中想得到日期的上一個月一般會這麼寫

CONVERT (VARCHAR(6),DATEADD ("Month", -1, @ProcDate), 112)

 

DATEADD是MSSQL的內建函數;

但是在mysql中是沒有這個函數的,那我們應該怎麼辦呢,別著急,在mysql中有DATE_SUB函數,基本上也能滿足我們的需求,上面這句話改寫完成後

CAST(DATE_SUB(ProcDate,INTERVAL1 MONTH) AS CHAR(6))

 

8.關於表變數

在MYsql中時不存在表變數這個概念的,但是卻可以用暫存資料表來代替,在Mysql中我們創業暫存資料表一般用
CREATEtemporary
table tempTotal 來進行建立,還有一點好處,就是臨時變數在預存程序執行完會自動釋放,不會佔用大量記憶體;
9.在MSSQL中會常常用到下面這個聲明
DECLARE@temp
VARCHAR (MAX);
但是在mysql中沒有max這個概念,我一般會用varcahr(8000)來替代,網上眾說紛紜,說varchar最大值多少的都有,我沒實驗過,改寫的時候慎用。
10.在MSSQL中金融產品化會常常用到下面這個聲明
DECLARE@temp
VARCHAR (MAX);
但是在mysql中沒有max這個概念,我一般會用varcahr(8000)來替代,網上眾說紛紜,說varchar最大值多少的都有,我沒實驗過,改寫的時候慎用。
11. 在mysql中沒有isnull函數,所以我們用ifnull來代替,用法一樣;
以上就是我改寫的過程中碰到的一些問題,希望對大家能有所協助吧!

sql Sever的預存程序轉換為mysql的

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.