sql >> Databasteknik >  >> RDS >> Oracle

Kartläggning av Oracle UDT som innehåller associativ array i C#

Det är inte en associativ array-datatyp (även känd som "index för tabell"); det är en insamlingsdatatyp och definieras i SQL-omfattningen.

Associativa arrayer är endast tillgängliga i PL/SQL-omfattningen och kan definieras som:

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

C# stöder överföring av associativa arrayer till lagrade procedurer med något sånt här:

OracleParameter parameter = new OracleParameter();
parameter.ParameterName  = "YourParameterName";
parameter.OracleDbType   = OracleDbType.Varchar2;
parameter.Direction      = ParameterDirection.Input;
parameter.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
parameter.Value          = new String[5]{"a","b","c","d","e"};

C# gör INTE stödja att skicka icke-associativa arrayer.

Om du vill ha en samling (en icke-associativ array) definierad som en medlem av en användardefinierad typ (UDT) måste du använda ett mellansteg för att skicka en associativ array och sedan använda PL/SQL för att konvertera den till en samling innan du tilldelar den till UDT. Du kan slå in allt detta i en lagrad procedur i ett PL/SQL-paket.




  1. Fatalt fel:Anrop till odefinierad funktion getsqlvaluestring()

  2. MYSQL:Infoga post om det redan finns en uppdateringspost

  3. Hur man skjuter ett JSON-objekt till en kapslad array i en JSONB-kolumn

  4. MySQL Automatisk ökning av kolumner på TRANSACTION, COMMIT och ROLLBACK