当前位置:首页 » 存储配置 » 存储过程转换

存储过程转换

发布时间: 2022-05-24 01:26:55

‘壹’ 存储过程类型转换

自己写的么?
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)

热点内容
qt资源图片编译 发布:2024-11-15 16:59:26 浏览:665
编译选项保护范围最广 发布:2024-11-15 16:57:47 浏览:605
c语言中的除号 发布:2024-11-15 16:51:09 浏览:215
安卓ops是什么文件 发布:2024-11-15 16:32:18 浏览:927
双线性插值算法c 发布:2024-11-15 16:30:45 浏览:866
c语言和vc的区别 发布:2024-11-15 16:19:23 浏览:118
linux是免费的吗 发布:2024-11-15 15:53:44 浏览:617
多控存储 发布:2024-11-15 15:52:42 浏览:283
一年级数学分解算法 发布:2024-11-15 15:41:08 浏览:411
安卓个人热点怎么分享 发布:2024-11-15 15:40:16 浏览:264