1

我们正在将数据库从 Oracle 迁移到 SQL Server。我的查询广泛使用了 Oracle 的 nvl 函数。在 SQL Server 中,要使用的函数是 isnull()。如果可能的话,我想通过将它们更改为使用 isnull() 来开始准备我的查询,同时仍在 Oracle 上。我的想法是在我的模式中创建一个包装函数 isnull() 并更改我的查询以使用该函数。这样,当我们切换数据库平台时,我的查询已经在使用新功能。

有没有一种方法可以在 Oracle 中创建一个名为 isnull() 的包装函数,它接受并返回任何数据类型?还是我只需要有多个 isnull() 声明,为所有预期的数据类型重载?

4

2 回答 2

9

另一种方法可能是使用COALESCE而不是NVL,因为 for 的语法COALESCE在 Oracle 和 SQL Server 中是相同的。尽管如此,让相同的 SQL 在 Oracle 和 SQL Server 中高效运行(甚至完全运行)的目标(如果这是您的目标)可能并不现实。

于 2012-12-18T00:15:11.597 回答
1

在 PL/SQL 中为同一函数具有多个重载的唯一方法是在包中创建它们。您可以创建一个包,其中包含许多不同的重载IsNull函数,这些函数接受和返回不同的数据类型并在查询中使用这些函数。当然,这确实意味着您必须在代码中包含包名称。当您迁移到 SQL Server 时,删除包名称可能很容易,但它不会是精确的迁移。

于 2012-12-17T23:37:35.820 回答