DBMS中的外部过程

时间:2011-03-21 01:17:45

标签: sql oracle database procedure

如果我们使用外部程序,我可以用其他语言执行一些代码,我想使用一些数值方法库来做一些矩阵计算并将结果存储在SQL,Oracle或任何DBMS中,这可能吗?

也许在SQL中有一个表,并告诉外部代码,处理它,我希望这是尽可能快。

  • 如何解释这个?
  • 外部程序是最佳选择吗?

3 个答案:

答案 0 :(得分:2)

作为一般规则。

CASE 
  WHEN "can do it in SQL" THEN SQL
  WHEN "can do it in PL/SQL" THEN PL/SQL
  WHEN "can do it in Java" THEN Java
  ELSE "External Procedure"
END

通常,“尽可能快”是一个糟糕的目标,因为它会在最好的硬件(SSD,高容量,低延迟网络组件......)上花费大量资金。 “如果预算为$ x,尽可能快”只会稍微合理一些。

选择一个可衡量的目标,例如10分钟内处理的100万个数据项。 然后采取一种方法并计时。如果它太慢,那么寻找最慢的部分(例如磁盘,网络)并消除它们或优化它们。

答案 1 :(得分:1)

根据您想要做的“矩阵计算”,您可以使用UTL_NA package在Oracle内部(在10gR2及更高版本中)执行此操作。

答案 2 :(得分:1)

您的问题确实清楚地解释了您想要实现的目标。从你的个人资料中我可以看到你提出了很多关于Matlab的问题所以我想你想知道如何在数据库中使用Matlab功能。

在Oracle中,外部过程是服务器端的OS例程,我们可以从数据库内的PL / SQL过程调用它。此功能的正常用途是将深奥的C功能合并到我们的代码中。近年来,外部程序的使用越来越少,因为Oracle内置程序的范围大大增加,而且我们从Java存储过程中获得了可扩展性。

存储过程的优点是它们在数据库中运行,这使它们在处理大量记录时非常有效。如果你想再运行一些Matlab函数,那么将数据包装成外部程序可能是正确的方法。基本上,您需要为DLL创建一个LIBRARY对象,然后为所需的库调用创建PL / SQL过程或函数。 Find out more

但是,数据库服务器往往针对某些类型的操作进行优化,而强烈的数学不是其中之一。因此,如果性能是关键标准,那么您可能最好还是支付I / O费用并通过ODBC连接到数据库。 Find out more