我与Oracle数据库有连接,但是我不知道如何执行存储过程。可以从Data Factory获得吗?
答案 0 :(得分:0)
ADF当前仅支持Azure SQL和SQL Server的存储过程。
也许您可以考虑自定义活动。 https://docs.microsoft.com/en-us/azure/data-factory/transform-data-using-dotnet-custom-activity
答案 1 :(得分:0)
您可以尝试使用“查找活动”吗?如果可以选择使用表或查询,请选择“查询”。由于这提供了编写自己的语句的位置,因此您可以尝试编写执行存储的proc语句。
关于Lookup活动要记住的一件事是,它期望返回数据。如果您存储的proc不返回数据,则可能需要添加一条附加语句以返回虚拟数据。
我以前只是用SQL做到这一点,但我认为没有理由它也不适用于Oracle。
答案 2 :(得分:0)
我使用了查找活动和 DUAL TABLE 的 SELECT 语句。由于存储过程不能从语句 SELECT 中调用。我创建了一个 oracle 函数,该函数调用了存储过程。该函数返回一个值,该值由查找活动接收。 定义函数时,必须添加语句 PRAGMA AUTONOMOUS_TRANSACTION。这是因为 Oracle 默认不允许使用 SELECT 语句执行 DML 指令。然后,您需要定义存储过程中的 DML 指令将是一个自治事务。
--Tabla
CREATE TABLE empleados(
emp_id NUMBER(9),
nombre VARCHAR2(100),
CONSTRAINT empleados_pk PRIMARY KEY(emp_id),
);
create or replace procedure insert_empleado (numero in NUMBER, nombre in VARCHAR2) is
begin
INSERT INTO empleados (emp_id, nombre)
Values(numero, nombre);
COMMIT;
end;
create or replace function funcinsert_empleado (numero in NUMBER, nombre in VARCHAR2)
return VARCHAR2
is
PRAGMA AUTONOMOUS_TRANSACTION;
begin
insert_empleado (numero, nombre);
return 'done';
end;
--statement in query of lookup
SELECT funcinsert_empleado ('1', 'Roger Federer')
FROM DUAL;
这是西班牙语的示例。 https://dev.to/maritzag/ejecutar-un-stored-procedure-de-oracle-desde-data-factory-2jcp