sql >> Base de Datos >  >> RDS >> Oracle

Cómo pasar una matriz de cadenas de C# a un procedimiento almacenado de Oracle

Esto es sintácticamente inválido ya que tiene un INDEX extra palabra clave al final pero si arreglas eso:

create type T_STRING_TAB is table of varchar2(260);

Ese es un tipo de datos de colección definido en el alcance de SQL. C# actualmente no admite pasar una matriz no asociativa.

Su código C# espera una matriz asociativa definida en el ámbito PL/SQL:

Para crear una matriz asociativa PL/SQL, debe hacerlo dentro de un paquete e incluir un INDEX BY <numeric data type> clase:

CREATE PACKAGE package_name AS
  TYPE STRING_MAP IS TABLE OF VARCHAR2(260) INDEX BY BINARY_INTEGER;
END;
/

Entonces su procedimiento puede ser:

create or replace procedure spTest(
  eventids in PACKAGE_NAME.STRING_MAP
)
as
  starteventid integer;
begin
  starteventid := 1000000;
end;
/