我遇到了从第三方收到外部函数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;
答案 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
子句,您应该会很高兴。
好运。