有什么方法可以从Oracle数据库执行存储过程?

时间:2019-05-14 13:14:15

标签: azure azure-data-factory

我与Oracle数据库有连接,但是我不知道如何执行存储过程。可以从Data Factory获得吗?

3 个答案:

答案 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。

enter image description here

答案 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;

Example lookup

这是西班牙语的示例。 https://dev.to/maritzag/ejecutar-un-stored-procedure-de-oracle-desde-data-factory-2jcp