‘壹’ 有什么工具可以把oracle里的存储过程转换成sqlServer存储过程
知道的话跟我说下
‘贰’ 如何在sql server存储过程中转化数据类型
不一定非要在存储过程中转换,用普通的sql语句就可以,一般用cast函数。
测试方法:
创建表及插入数据:
createtabletest
(idint,
starttimevarchar(20));
insertintotestvalues(1,'2015-07-11');
将starttime字段转化为datetime类型:
selectcast(starttimeasdatetime)fromtest;
结果如图,这时,starttime就转成了datetime类型:
‘叁’ mysql与oracle存储过程之间的转换
建议使用PowerDesigner将ORACLE转换为物理模型,再转换为逻辑高山模戚携中型,然后通过这个逻辑模型重新选择DBMS(MYSQL),将其转换为MYSQL的物理逻辑模型,在物理逻辑模型上更新触发器,过程等对象,然后生成MYSQL的物理文件,或直接隐派导入到MYSQL数据库实例中。
‘肆’ SQL Server中的下面那个存储过程转换成在Navicat for MySQL中是什么样的
createprocerecheckStu
(INidvarchar(10),
INnamevarchar(20),
INclassvarchar(10)
)
begin
declarenewidvarchar(12);
declarenewnamevarchar(22);
declarenewclassvarchar(12);肢做
setnewid=CONCAT('%',id,'%');
setnewname=CONCAT('%',name,'哪饥谈%');
setnewclass=CONCAT('%',class,'%');
select李碰*fromstudentwhere学号likenewidand班级likenewclassand姓名likenewname
end
直翻,无校验
----------------
你真是贪心---连排版都省了。你不懂两个问题分开问,排版一下,得到回答的几率都大。
‘伍’ PostgreSQL存储过程转换SQLServer的
因sql server2000中不允许调用当前时间的函数getdate(),也不允许非表变量之外的update、insert、delete操作,故这里修改为存储过程,其中原来的return值改用输出参数"@Result int output"来实现,具体如下:
CREATE PROCEDURE web_login(@web_username varchar(50), @web_pwd varchar(50), @web_ip varchar(50),@Result int output)
AS
BEGIN
declare
@len int, -- -2 fail -3 lockip
@u_locktime varchar(10),
@u_cleartime varchar(50),
@u_count int,
@user_id int,
@log_id int,
@cal int
set @len=0
select @u_count=config_value from as_all_config where config_item='U_AllowCount'
select @u_cleartime=config_value from as_all_config where config_item='U_LimitDay'
set @cal=@u_cleartime
select @u_locktime=config_value from as_all_config where config_item='U_Locktime'
--判断用户是否已经锁定
select top 1 @len=serialno from web_user_log where login_id =@web_username and last_ip=@web_ip and last_lock_time<getdate() and last_count= @u_count
if @len>0
begin
insert into as_log(log_fromtype, log_type,log_text, log_level) values(8,4,'用户 '+@web_username+'登录失败 ip锁定',1)
set @Result=-3
RETURN
end
--判断用户失败次数
select top 1 @len=last_count,@log_id=serialno from web_user_log where login_id =@web_username and last_ip=@web_ip and convert(varchar(10),last_fail_time,120)=convert(varchar(10),getdate(),120) order by last_fail_time desc
if @len>3
begin
update web_user_log set last_lock_time=getdate() where serialno=@log_id
insert into as_log(log_fromtype, log_type,log_text, log_level) values(8,4,'用户 '+@web_username+'登录失败 ip锁定',1)
set @Result=-3
RETURN
end
--正常操作
select top 1 @len=last_count, @log_id=serialno from web_user_log where login_id =@web_username and last_ip=@web_ip and convert(varchar(10),last_fail_time,120)=convert(varchar(10),getdate(),120) order by last_fail_time desc
select top 1 @user_id=serialno from web_user where login_id = @web_username and login_pwd=@web_pwd
delete from web_user_log where login_id =@web_username and last_lock_time<=convert(varchar(10),dateadd(day,-@cal,getdate()),120)
if @user_id>0
begin
insert into as_log( log_fromtype, log_type, log_text, log_level) values(8,4,'用户 '+@web_username+'登录成功',1)
set @Result=@user_id
RETURN
end
else if (@len is null or @len=0)
insert into web_user_log(last_count, last_ip, login_pwd, login_id) values(1,@web_ip,@web_pwd,@web_username)
else
update web_user_log set last_count=last_count+1 where serialno=@log_id
insert into as_log(log_fromtype, log_type, log_text, log_level)values(8,4,'用户 '+@web_username+'登录失败',1)
set @Result=-2
RETURN
END
go
--更改当前数据库中对象的所有者:
sp_changeobjectowner 'web_login','ema_user'
go
‘陆’ SQL server 存储过程varchar到int类型转换
/*
存储过程的return只能返回int类型的数据,并且只这样接收返回值的
declare@Aint
Exec@A=P_判断是否闰年
select@A
*/
--你可以改成这样
alterprocP_判断是否闰年
as
begin
declare@时间int
set@时间=datepart(year,'2000-02-01')
selectCASEWHEN(@时间%4=0AND@时间%100<>0)or(@时间%400=0)then'是闰年'
else'不是闰年'
end
end
--也可以这样
alterprocP_判断是否闰年(@RstVarchar(10)output)
as
begin
declare@时间int
set@时间=datepart(year,'2000-02-01')
Set@Rst=CASEWHEN(@时间%4=0AND@时间%100<>0)or(@时间%400=0)then'是闰年'
else'不是闰年'
end
end
/*
declare@Avarchar(10)
ExecP_判断是否闰年@Aoutput
select@A
*/
‘柒’ 存储过程类型转换
自己写的么?
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
因为没有表结果不能进行测试,所以可能会出错,如果出错就把表结果发一下,进行测试
‘捌’ 求帮助,将oracle的存储过程转换为mysql的存储过程
1. 首先是jdbc.properties属性文件的编写,便于数据库移植:
datasource.driverClassName=oracle.jdbc.driver.OracleDriver
datasource.url=jdbc:oracle:thin:@10.6.1.11:1521:student
datasource.username=zs
datasource.password=zs
datasource.defaultAutoCommit=true
hibernate.dialect=org.hibernate.dialect.Oracle9Dialect
#当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3
c3p0.acquireIncrement=5
#初始化戚迟时获取三个连接,取值应在minPoolSize与maxPoolSize之间。Default: 3
c3p0.initialPoolSize=10
#每60秒检查所有连接池中的空闲连接。Default: 0
c3p0.idleConnectionTestPeriod=600
#-连接池中保留的最小连接数。
c3p0.minPoolSize=5
#连接池中保留的最大连接数。如租Default: 15
c3p0.maxPoolSize=50
#JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。但由于预缓存的statements
#属于单个connection而不高橡李是整个连接池。所以设置这个参数需要考虑到多方面的因素。
#如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0
c3p0.maxStatements=100
#c3p0是异步操作的,缓慢的JDBC操作通过帮助进程完成。扩展这些操作可以有效的提升性能
#通过多线程实现多个操作同时被执行。Default: 3
c3p0.numHelperThreads=10
#最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0
c3p0.maxIdleTime=600
#hibernate.dialect=org.hibernate.dialect.SQLServerDialect
hibernate.jdbc.batch_size=25
hibernate.jdbc.fetch_size=50
hibernate.show_sql=true
hibernate.connection.release_mode=after_transaction
2. 其次是spring配置文件的数据源配置:
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>/WEB-INF/classes/conf/jdbc/jdbc.properties</value>
</property>
</bean>
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close" dependency-check="none">
<property name="driverClass">
<value>${datasource.driverClassName}</value>
</property>
<property name="jdbcUrl">
<value>${datasource.url}</value>
</property>
<property name="user">
<value>${datasource.username}</value>
</property>
<property name="password">
<value>${datasource.password}</value>
</property>
<!-- 当连接池中连接耗尽的时候c3p0一次同时获取的连接数 -->
<property name="acquireIncrement">
<value>${c3p0.acquireIncrement}</value>
</property>
<!--初始化时获取三个连接,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->
<property name="initialPoolSize">
<value>${c3p0.initialPoolSize}</value>
</property>
<!-- 最小连接数 -->
<property name="minPoolSize">
<value>${c3p0.minPoolSize}</value>
</property>
<!-- 最大连接数 -->
<property name="maxPoolSize">
<value>${c3p0.minPoolSize}</value>
</property>
<!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
<property name="maxIdleTime">
<value>${c3p0.maxPoolSize}</value>
</property>
<!--每60秒检查所有连接池中的空闲连接。Default: 0 -->
<property name="idleConnectionTestPeriod">
<value>${c3p0.idleConnectionTestPeriod}</value>
</property>
<!--JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。但由于预缓存的statements属于单个connection而不是整个连接池。
所以设置这个参数需要考虑到多方面的因素。如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0-->
<property name="maxStatements">
<value>${c3p0.maxStatements}</value>
</property>
<!--c3p0是异步操作的,缓慢的JDBC操作通过帮助进程完成。扩展这些操作可以有效的提升性能通过多线程实现多个操作同时被执行。Default: 3-->
<property name="numHelperThreads">
‘玖’ 有好的Mysql转换为Oracle转换工具没有
可以用这个软件
Convert Mysql to Oracle
最新版本:4.0
Convert Mysql to Oracle是一个免费的数据库转换工具,实现快速安全地将Mysql数据库导入为ORACLE数据库。
Convert Mysql to Oracle 功能特点
可以转换所有的Mysql字段类型
支持所有版本的Mysql
可以将数据合并到已经存在的ORACLE表中
非常容易使用的向导模式
支持所有版本的Mysql字符集
对超大数据表的导出进行了优化处理
Convert Mysql to Oracle 功能限制
不能转换MYSQL的存储过程
Convert Mysql to Oracle 运行需求
有相应的数据库操作权限
在机器中安装了ORACLE客户端,使得Convert Mysql to Oracle能够成功连接到ORACLE
这个软件是免费的,网络上一搜就出来了`
‘拾’ oracle存储过程\触发器转换为SQLSERVER
把存储过程单拉出来写,触发备肆器触发岩李的时候调用该仿枣轿过程
like
create
or
replace
procere
aaa
(para1
in
varchar...)
is
begin...end;
----------------------------------------------------------------
CREATE
OR
REPLACE
TRIGGER
interface_ygcc
BEFORE
UPDATE
ON
表1
FOR
EACH
ROW
aaa(para1...)