Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 ORA-21500: internal error code, arguments: [%s], [%s], [%s], [%s], [%s], [%s], [%s], [%s].  [new]
Myxa_beer
Member

Откуда:
Сообщений: 59
Добрый день. Помогите пожалуйста решить проблему.

Необходимо через OCI обратиться к процедуре сервера, которая ждет коллекцию пользовательских объектов.

Server - Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production.
Версия клиента - 11.2.0.

На базе создан

CREATE OR REPLACE Type Typ_Obj As Object (PN_1  Number(10),
                                          PN_2  Number(10),
                                          PN_3  Varchar2(255));
\
CREATE OR REPLACE Type Typ_Tab As Table Of Typ_Obj ;
\


Далее, существует пакет c процедурой "пустышкой".

CREATE OR REPLACE Package Test_PKG
As
  Procedure Test_1(p_Array  In  Typ_Tab);
End Test_PKG;
\
CREATE OR REPLACE Package Body Test_PKG
As
  Procedure Test_1(p_Array  In  Typ_Tab)
  Is
  Begin
    Null;
  End Test_1;
End Test_PKG;
\


Проблема заключается в том, что не можем через OCI вызвать этот пакет. Нарываемся на ошибку ORA-21500: internal error code, arguments: [%s], [%s], [%s], [%s], [%s], [%s], [%s], [%s].

Далее пример клиентского приложения.

 [OracleCustomTypeMappingAttribute("SHEMA_TEST.Typ_Obj")]
    public class Typ_Obj : INullable, IOracleCustomType, IOracleCustomTypeFactory
    {
        private bool _isNull;

        [OracleObjectMappingAttribute("PN_1")]
        public virtual int PN_1 { get; set; }

        [OracleObjectMappingAttribute("PN_2")]
        public virtual int PN_2 { get; set; }

        [OracleObjectMappingAttribute("PN_3")]
        public virtual string PN_3 { get; set; }


        public virtual void FromCustomObject(OracleConnection objCon, IntPtr objUdt)
        {
            OracleUdt.SetValue(objCon, objUdt, "PN_1", this.PN_1);
            OracleUdt.SetValue(objCon, objUdt, "PN_2", this.PN_2);
            OracleUdt.SetValue(objCon, objUdt, "PN_3", this.PN_3);
        }

        public virtual void ToCustomObject(OracleConnection objCon, IntPtr objUdt)
        {
            this.PN_1 = ((int)(OracleUdt.GetValue(objCon, objUdt, "PN_1")));
            this.PN_2= ((int)(OracleUdt.GetValue(objCon, objUdt, "PN_2")));
            this.PN_3 = ((string)(OracleUdt.GetValue(objCon, objUdt, "PN_3")));
        }

        public IOracleCustomType CreateObject()
        {
            return new Typ_Obj();
        }

        public static Typ_Obj Null
        {
            get { return new Typ_Obj { _isNull = true }; }
        }  
  
        public bool IsNull
        {
            get { return _isNull; }
        }
    }

OracleConnection oracleConnection = null;
            OracleCommand cmd = null;
            try
            {
                Typ_Obj person = new Typ_Obj();
                person.PN_1 = 10;
                person.PN_2 = 20;
                person.PN_3 = "test";

                oracleConnection =
                    new OracleConnection(
                        string.Format("Data Source={0};User Id={1};Password={2};", "схема", "база", "пароль"));
                oracleConnection.Open();
                cmd = new OracleCommand("Test_PKG.Test_1", oracleConnection);
                cmd.CommandType = CommandType.StoredProcedure;

                OracleParameter p1 = cmd.Parameters.Add("p_Array", OracleDbType.Object);
                p1.Direction = ParameterDirection.Input;
                p1.UdtTypeName = "SHEMA_TEST.Typ_Tab";
                p1.Value = person;

                cmd.ExecuteNonQuery();

                oracleConnection.Close();
            }
            catch (Exception ex)
            {
                textBoxMessage.Text = ex.Message;
            }
            finally
            {
                cmd.Dispose();
                oracleConnection.Close();
                oracleConnection.Dispose();
            }


Подскажите пожалуйста, куда копать. Заранее благодарен.
21 апр 14, 16:35    [15911784]     Ответить | Цитировать Сообщить модератору
 Re: ORA-21500: internal error code, arguments: [%s], [%s], [%s], [%s], [%s], [%s], [%s], [%s].  [new]
Изя Кацман
Member

Откуда: Великий Эксперимент
Сообщений: 2019
Без OCI проблем с вызовом нет из-за слэшей не в ту сторону? :)
21 апр 14, 16:43    [15911831]     Ответить | Цитировать Сообщить модератору
 Re: ORA-21500: internal error code, arguments: [%s], [%s], [%s], [%s], [%s], [%s], [%s], [%s].  [new]
Myxa_beer
Member

Откуда:
Сообщений: 59
Изя Кацман, та дело не в слешах :) перепутал когда писал. Но можете поверить на слово, на базе все объекты валидные. :)
21 апр 14, 18:19    [15912341]     Ответить | Цитировать Сообщить модератору
 Re: ORA-21500: internal error code, arguments: [%s], [%s], [%s], [%s], [%s], [%s], [%s], [%s].  [new]
Изя Кацман
Member

Откуда: Великий Эксперимент
Сообщений: 2019
Myxa_beer
Изя Кацман, та дело не в слешах :) перепутал когда писал. Но можете поверить на слово, на базе все объекты валидные. :)
Таки ответь, камрад!
Если вызывать без OCI, а просто из PL/SQL, то проблем с вызовом нет?
21 апр 14, 18:24    [15912366]     Ответить | Цитировать Сообщить модератору
 Re: ORA-21500: internal error code, arguments: [%s], [%s], [%s], [%s], [%s], [%s], [%s], [%s].  [new]
dobrinator
Guest
Было такое же при компиляции вьюхи, DBA жали плечами, потом ушло с патчем.

ORA-21500
internal error code, arguments: [string], [string], [string], [string], [string], [string], [string], [string]

Cause: This is the generic error number for the OCI environment (client-side) internal errors. This indicates that the OCI environment has encountered an exceptional condition.

Action: Report as a bug - the first argument is the internal error number.

Oracle Product Document Library (C) Oracle Corporation
Manual: Oracle Database Error Messages
Reference: B28278-01
22 апр 14, 11:43    [15914809]     Ответить | Цитировать Сообщить модератору
 Re: ORA-21500: internal error code, arguments: [%s], [%s], [%s], [%s], [%s], [%s], [%s], [%s].  [new]
Myxa_beer
Member

Откуда:
Сообщений: 59
Изя Кацман,

сорри за опоздание. Вызов в PL/SQL анонимном блоке происходит без проблем. А вот вызов через OCI - вылетает ошибка.
22 апр 14, 15:35    [15916843]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить