我们正在将数据库从Oracle迁移到SQL Server。我的查询广泛使用了Oracle的nvl函数。在SQL Server中,要使用的函数是isnull()。如果可能的话,我想通过将它们更改为使用isnull()来开始准备我的查询,同时仍然在Oracle上。我的想法是在我的模式中创建一个包装函数isnull()并更改我的查询以使用该函数。这样,当我们切换数据库平台时,我的查询已经在使用新函数。
有没有办法在Oracle中创建一个名为isnull()的包装函数,它接受并返回任何数据类型?或者我只需要有多个isnull()声明,为所有预期的数据类型重载?
答案 0 :(得分:9)
另一种方法可能是使用COALESCE
而不是NVL
,因为COALESCE
的语法在Oracle和SQL Server中都是相同的。尽管如此,在Oracle和SQL Server中使用相同的SQL(或者甚至可以工作)的目标(如果是您的目标)可能并不现实。
答案 1 :(得分:1)
PL / SQL中对同一函数进行多次重载的唯一方法是在包中创建它们。您可以创建一个包,其中包含许多不同的重载IsNull
函数,这些函数接受并返回不同的数据类型并在查询中使用这些类型。当然,这确实意味着您必须在代码中包含软件包名称。移动到SQL Server时,删除程序包名称可能很容易,但它不是精确的迁移。