存储过程转换
‘壹’ 存储过程类型转换
自己写的么?
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)