如何根据外部函数的结果更新表中的列?

时间:2019-06-11 21:08:06

标签: sql oracle function

我遇到了从第三方收到外部函数FUNCT(a1,a2,a3,ZZZ)的情况。此函数接受a1,a2,a3的值并返回数字ZZZ。

我也有类似的表结构,column1,column2,column3,Amount。我想将column1的表值匹配到a1,column2到a2,column3到a3,并读取ZZZ的输出并更新到表中的Amount列中。我看到游标了。请帮忙更新它。

谢谢。

编辑

(摘自OP对以下答案的评论)

我收到的不是程序功能。有人告诉我调用该函数并进行更新。这是我尝试遇到的代码。

DECLARE
  pass varchar2(100);
  func_amt number;
BEGIN
  update table yt
    set yt.amount = func_amt
    where XYXFUNC(yt.a1,yt.a2, yt.a3,yt.a4,yt.5, pass , func_amt );
END;

1 个答案:

答案 0 :(得分:1)

我猜你所拥有的被定义为

CREATE OR REPLACE PROCEDURE FUNCT(a1  IN  VARCHAR2,
                                  a2  IN  VARCHAR2,
                                  a3  IN  VARCHAR2,
                                  ZZZ OUT NUMBER)
AS
  -- ...whatever...
END FUNCT;

不能直接从SQL调用过程(例如已获得的过程)。只能从SQL调用通过RETURN语句返回值的FUNCTIONS。

但是,一切并没有丢失。您需要一个包装函数,该函数调用您的第三方过程,传递适当的参数,捕获返回的值,然后使用RETURN语句将该值返回给调用方。如果定义以下功能:

CREATE OR REPLACE FUNCTION WRAPPER_FUNC(a1  IN  VARCHAR2,
                                        a2  IN  VARCHAR2,
                                        a3  IN  VARCHAR2)
  RETURN NUMBER
AS
  ZZZ  NUMBER;
BEGIN
  FUNCT(a1, a2, a3, ZZZ);

  RETURN ZZZ;
END WRAPPER_FUNC;

然后您可以将SQL语句中的WRAPPER_FUNC用作:

UPDATE YOUR_TABLE yt
  SET yt.AMOUNT = WRAPPER_FUNC(yt.COLUMN1, yt.COLUMN2, yt.COLUMN3)

WHERE语句中添加所需的任何UPDATE子句,您应该会很高兴。

好运。