Как передать параметр типа таблицы (пользовательский тип) в Posgresql EDB из C # .net - PullRequest
0 голосов
/ 30 сентября 2019

Я использую EDBPostgresql в качестве базы данных и C # .NET в качестве языка интерфейса с EDB Connector версии 4.0.6.1. У меня проблема с параметром INPUT для настраиваемого типа. Я объявил настраиваемый тип в схеме ипакет и вызов через другой пакет proc, но я получаю сообщение об ошибке:

«42883: процедура quad_txn.pkg_group_config_test.p_savegroup (символ меняется []) не существует»

Я пробовал 2-3 вещи, но не смог добиться успеха, и я пытался без пакета, но ошибка та же, однако это нормально работает с Oracle 11g в качестве входного параметра PLSQLAssociativeArray

Код базы данных:

TYPE t_string_tab IS TABLE OF character varying(4000) INDEX BY integer;

Создается с помощью quad_txn.pkg_cmn_util (schema.packageName)

И

PROCEDURE p_savegroup(pi_mnpg_id quad_txn.pkg_cmn_util.t_string_tab);

Создается с помощью quad_txn.pkg_group_config_test (schema.packageName)

public static void CreateGroup()
{
    try
    {
        string sConn = "Server=quad-station;Port=5444;User Id=quad_usr;Password=quad_usr;Database=quadrant_db;SearchPath=quad_txn;Pooling=True;Timeout=30;MaxPoolSize=30;MinPoolSize=10";
        EDBConnection conn = new EDBConnection(sConn);
        conn.Open();
        EDBCommand command;

        ////Procedure calling
        EDBTransaction tran = conn.BeginTransaction();
        command = new EDBCommand("quad_txn.PKG_GROUP_CONFIG_TEST.P_SAVEGROUP", conn);

        //conn.ReloadTypes();
        //conn.TypeMapper.MapComposite<TStringTab>();
        command.CommandType = CommandType.StoredProcedure;
        command.Transaction = tran;

        EDBParameter param7 = new EDBParameter();
        param7.ParameterName = "PI_MNPG_ID";
        param7.EDBDbType = EDBDbType.Array | EDBDbType.Varchar;
        //  param7.DataTypeName = "quad_txn.pkg_cmn_util.t_string_tab";
        param7.Size = 100;
        param7.Direction = ParameterDirection.Input;
        param7.SourceVersion = DataRowVersion.Current;
        param7.Value = new string[] { "1", "3", "11" };
        command.Parameters.Add(param7);

        int affectedrows = command.ExecuteNonQuery();
        tran.Commit();
        conn.Close();
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
}
...