需要将以下存储过程从 Oracle 转换为 SQL

Posted

技术标签:

【中文标题】需要将以下存储过程从 Oracle 转换为 SQL【英文标题】:Need to convert below stored procedure from Oracle to SQL 【发布时间】:2018-07-19 08:10:06 【问题描述】:

我需要将下面的存储过程从 Oracle 转换为 SQL,我尝试通过 SqlSever 迁移助手进行转换,但无法转换动态查询。我还需要知道如何更改序列并获取 nextval:

create or replace 
procedure dep_reset_seq( p_seq_name in varchar2,p_Start_value integer )
is
    l_val number;
begin
    execute immediate
    'select ' || p_seq_name || '.nextval from dual' INTO l_val;

    execute immediate
    'alter sequence ' || p_seq_name || ' increment by -' || l_val || 
                                                          ' minvalue ' || p_Start_value;

    execute immediate
    'select ' || p_seq_name || '.nextval from dual' INTO l_val;

    execute immediate
    'alter sequence ' || p_seq_name || ' increment by 1 minvalue  ' || p_Start_value;
end;

【问题讨论】:

据我所知,SQL Server(M$SQL Server,因为Oracle也是SQL Server)是没有序列概念的。它改为使用 AutoIdentity 字段。 这和 C# 有什么关系?无论如何,SO 不是代码翻译服务。分享您已经尝试过的内容以及您遇到的问题。 @nabuchodonossor - 从 SQL Server 2012 开始,支持序列。 @andrew:谢谢,不知道,发现是从 2012 年开始的 :-( 好久不见了.. 我想知道的:为什么要以这种方式使用序列?获取下一个值,并使用新的起始值重新创建序列? 【参考方案1】:

SQL Server 从 2012 开始支持序列,有一个改变序列命令:https://docs.microsoft.com/en-us/sql/t-sql/statements/alter-sequence-transact-sql?view=sql-server-2017 改变序列的命令格式与Oracle非常相似。

获取下一个值是一种不同格式的命令,使用NEXT VALUE 构造访问。

https://docs.microsoft.com/en-us/sql/t-sql/functions/next-value-for-transact-sql?view=sql-server-2017

这些概念中的每一个都很容易搜索,并且现有的文档非常全面 - 那么您遇到了更具体的问题吗?

【讨论】:

以上是关于需要将以下存储过程从 Oracle 转换为 SQL的主要内容,如果未能解决你的问题,请参考以下文章

将存储过程 PL/SQL 转换为 Java

将引用集合表的过程从 Oracle 转换为 Postgresql 时出错

如何在查询中调用 oracle 存储过程?

从 ASP.NET 调用 Oracle 存储过程时,无法将“System.Int32[]”类型的对象转换为“System.IConvertible”类型

将存储过程从 MS SQL Server 转换为 Informix

将Java存储过程迁移到AWS RDS oracle