存儲過程轉換
『壹』 存儲過程類型轉換
自己寫的么?
1有些地方沒必要4個單引號,3個就行,在sql中字元串的拼接語句中要表示1個單引號就得用兩個單引號,前一個表示轉義的意思,編程語言都有轉義一說
2因為是字元串拼接的,而@FormerPrice這些是money類型的,如果不轉換,就默認要把字元串轉換成money類型了,就會出錯。所以得把@FormerPrice之類的轉換成字元類型的,存儲過程修改如下
ALTER PROCEDURE [dbo].[SearchMerchandise]
@Category varchar(50),
@Brand varchar(50),
@Type varchar(50),
@FormerPrice money,
@LatterPrice money
AS
BEGIN
declare @QueryString varchar(100)
set @QueryString = 'select * from Merchandise where Category = ''' + @Category + ''' and Brand = ''' + @Brand + ''' '
SET NOCOUNT ON;
if @Type<>''
set @QueryString = @QueryString+' and Type=''' +@Type+ ''''
if @FormerPrice<>'' and @LatterPrice<>''
set @QueryString = @QueryString+' and PriceNow between '''+ convert(varchar(20),@FormerPrice) + ''' and ''' + convert(varchar(20),@LatterPrice) + ''''
if @FormerPrice<>'' and @LatterPrice=''
set @QueryString = @QueryString+' and PriceNow >=''' + convert(varchar(20),@FormerPrice) + ''''
if @FormerPrice='' and @LatterPrice<>''
set @QueryString = @QueryString+' and PriceNow <=''' + convert(varchar(20),@LatterPrice) + ''''
exec(@QueryString)
END
因為沒有表結果不能進行測試,所以可能會出錯,如果出錯就把表結果發一下,進行測試
『貳』 如何在sql server存儲過程中轉化數據類型
不一定非要在存儲過程中轉換,用普通的sql語句就可以,一般用cast函數。
測試方法:
創建表及插入數據:
createtabletest
(idint,
starttimevarchar(20));
insertintotestvalues(1,'2015-07-11');
將starttime欄位轉化為datetime類型:
selectcast(starttimeasdatetime)fromtest;
結果如圖,這時,starttime就轉成了datetime類型:
『叄』 如下圖,怎樣用存儲過程把第一個表中的數據轉換成第二表中去
創建存儲過程:
CREATE PROCEDURE [dbo].[sp_InsertData]
AS
BEGIN
insert into table2
select name,sum(case when ncourse=1 then cno else 0 end),
sum(case when ncourse=2 then cno else 0 end),
sum(case when ncourse=3 then cno else 0 end),
sum(case when ncourse=4 then cno else 0 end),
sum(case when ncourse=5 then cno else 0 end)'
from table1
group by name
END
然後調用存儲過程sp_InsertData
但你似乎不需要用存儲過程吧,直接執行那段insert語句就可以了
『肆』 oracle 存儲過程字元串轉化為date
可以使用to_date方法將字元串轉換為date類型:
示例:
SQL> select
to_date(to_char(sysdate,'yyyy-MM-dd
hh24:mi:ss'),'yyyy-MM-dd
hh24:mi:ss')
into
fTime
from
al;
執行結果:2015-11-06
22:20:27。
備註:存儲過程中的用法也是這樣的,沒有任何區別。
SELECT
to_date(to_char(sysdate-1,'yyyy-mm-dd')||'
23:59:59','yyyy-mm-dd
hh24:mi:ss')
INTO
END_TIME
FROM
DUAL;
『伍』 SQL SERVER 存儲過程,轉換成ORACLE存儲過程
你這個過程其實就是分頁查詢用戶信息是吧
--利用游標返回結果集
CREATEORREPLACEPACKAGEpkg_queryASTYPEcur_queryISREFCURSOR;
ENDpkg_query;
CREATEORREPLACEPROCEDUREUP_UserInfo_List_select
(
WhereSqlinvarchar2,--查詢條件
StartIndexinNumber,--當前頁
EndIndexinNumber,--每頁顯示記錄條數
RecordCountoutNumber,
v_curoutSYS_REFCURSOR)--返回的結果集
IS
v_sqlVARCHAR2(1000):='';--sql語句
BEGIN
--查總記錄數
v_sql:='SELECTTO_NUMBER(COUNT(*))FROMUserInfoWHERE1=1';
IFWhereSqlISNOTNULLorWhereSql<>''THEN
v_sql:=v_sql||WhereSql;
ENDIF;
EXECUTEIMMEDIATEv_sqlINTORecordCount;
--實現分頁查詢
v_sql:='SELECT*FROM(SELECTA.*,rownumrFROM(SELECTUserId,UserName,RoleId,IsLock,DescfromUserInfo';
IFWhereSqlISNOTNULLorWhereSql<>''THEN
v_sql:=v_sql||'WHERE1=1'||WhereSql||'ORDERBYUserId';
ENDIF;
v_sql:=v_sql||')AWHERErownum<='||EndIndex||')BWHEREr>='||StartIndex;
DBMS_OUTPUT.put_line(v_sql);
OPENv_curFORv_sql;
ENDUP_UserInfo_List_select;
--執行,plsql這里是看不到結果集,找到這個過程點測試,才能看到。當然你在程序里使用也是能返回的。
declare
RecordCountnumber:=0;
v_curpkg_query.cur_query;
begin
UP_UserInfo_List_select('',1,10,RecordCount,v_cur);
DBMS_OUTPUT.put_line(RecordCount);
end;
『陸』 SQL2008 存儲過程行列轉換
ALTERPROC[dbo].[Report_Sale_JXS_HFgongdan]
(@BeginDateDatetime
,@EndDatedatetime
,@Name1VARCHAR(50)
,@Name2VARCHAR(50))
AS
BEGIN
if@EndDate<='2010-01-01'
begin
select@EndDate=GETDATE()
end
SELECT
T0.CARDNAMEAS'客戶名稱',T0.CARDPHONEAS'客戶電話',T0.VINAS'車架號',T0.MNameAS'車型描述'
,T4.OColorNameAS'車身顏色',T0.NoteAS'備注',T0.JYNoteAS'建議',T6.U001AS'事業部',T4.CmpCodeAS'經銷商編號'
,T0.SaleNameAS'經銷商名稱',T0.SalePhoneAS'經銷商電話',CONVERT(VARCHAR(10),T0.DocDay,23)AS'來電日期'
--,T3.L1DESCAS'問題'
--,T3.L1AnswerAS'回答'
--,T3.L1ScoreAS'得分'
,MAX(CASEWHENT3.L1DESC='XXX問題'THENT3.L1AnswerEND)AS'XXX問題的回答'
--所有問題按上面那樣子寫出來
,MAX(CASEWHENT3.L1DESC='XXX問題'THENT3.L1ScoreEND)AS'XXX問題的得分'
--所有問題按上面那樣子寫出來
,T0.[Status]AS'回訪狀態',T0.DocTotalAS'綜合得分',T0.HFTypeNameAS'回訪類型',T2.userNameAS'回訪人員'
,casewhenT0.IsHFCG='1'then'是'
whenT0.IsHFCG='0'then'否'endAS'是否成功'
,casewhenT0.IsClose='1'then'是'
whenISNULL(T0.IsClose,0)='0'then'否'endas'是否結束'
FROMdmsSaleHFDJT0
innerJOINdmsSaleHFLXT1ONT0.HFTypeName=T1.[DESC]
innerjoindmsBaseUserT2onT0.HFPsnName=T2.userName
innerjOINdmssaleHFDJ1T3ONT3.ID=T0.ID
INNERjoindmsSaleOCarT4onT4.VIN=T0.VIN
innerjoindmsBaseUserT5onT5.userCode=T4.CmpCode
innerjoindmsBaseChinaT6ONT5.province=T6.Id
whereconvert(varchar(10),T0.DocDay,23)>=@BeginDate
andconvert(varchar(10),T0.DocDay,23)<=@EndDate
and(T0.HFTypeName=@Name1or@Name1='')
and(T0.HFPsnName=@Name2or@Name2='')
----------
GROUPBY'除T3.L1DESC、T3.L1Answer、T3.L1Score所有列'
END
或者直接在報表裡面列分組
『柒』 怎麼將mysql存儲過程轉換成oracle存儲過程
建議使用PowerDesigner將ORACLE轉換為物理模型,再轉換為邏輯模型,然後通過這個邏輯模型重新選擇DBMS(MYSQL),將其轉換為MYSQL的物理邏輯模型,在物理邏輯模型上更新觸發器,過程等對象,然後生成MYSQL的物理文件,或直接導入到MYSQL資料庫實例中。
『捌』 在sqlserver存儲過程中如何切換資料庫
不一定非要在存儲過程中轉換,用普通的sql語句就可以,一般用cast函數。
測試方法:
創建表及插入數據:
create table test
(id int,
starttime varchar(20));
insert into test values (1,'2015-07-11');
將starttime欄位轉化為datetime類型:
select cast(starttime as datetime) from test;
結果如圖,這時,starttime就轉成了datetime類型:
『玖』 存儲過程里變數怎麼轉換成字元串
字元型轉浮點型用atof
或者strtod(後者安全點),它的默認類型是double型。
用法:比方說你定義了CString的對象str,要想轉換為浮點型可以定義一個浮點型變數例如double
a
=
atof(str)就可以了
『拾』 存儲過程中如何將日期轉換成字元型
只要是日期型的傳進來就可以,不用管它格式,在過程里邊處理。
如果要規定格式的話,只能用字元型了。
你那樣直接傳的是字元型了,你只要把它轉換成日期型就可以了。
SQL> exec test(to_date('2010-07-08 12:00:00','hh24:mi:ss'), to_date('2010-07-25 12:00:00','hh24:mi:ss'));
或者是把過程的參數改成字元型的,在傳入的時候就不用to_date了,只要在使用的時候把它轉換成日期型就可以。
create or replace procere test (time1 in varchar2, time2 in varchar2)