Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como passar uma matriz de strings de C# para um procedimento armazenado Oracle


Isso é sintaticamente inválido, pois tem um INDEX extra palavra-chave no final, mas se você corrigir isso:
create type T_STRING_TAB is table of varchar2(260);

Esse é um tipo de dados de coleta definido no escopo SQL. Atualmente, o C# não oferece suporte à passagem de uma matriz não associativa.

Seu código C# está esperando um array associativo definido no escopo PL/SQL:

Para fazer um array associativo PL/SQL você precisa fazer isso dentro de um pacote e incluir um INDEX BY <numeric data type> cláusula:
CREATE PACKAGE package_name AS
  TYPE STRING_MAP IS TABLE OF VARCHAR2(260) INDEX BY BINARY_INTEGER;
END;
/

Então seu procedimento pode ser:
create or replace procedure spTest(
  eventids in PACKAGE_NAME.STRING_MAP
)
as
  starteventid integer;
begin
  starteventid := 1000000;
end;
/