powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / ORA-28112: сбой при выполнении функции методики
9 сообщений из 9, страница 1 из 1
ORA-28112: сбой при выполнении функции методики
    #37303614
Фотография stells2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не могу понять, в чем может быть косяк..
есть Oracle 11, настроены политики на уровне строк (dbms_rls.add_policy) для пары таблиц.
Суть: таблицы справочные, в каждой таблице есть поле которое является флагом: если 0 - доступно всем, если 1 - не доступно всем кроме админа и пользователя НСИ.
На клиентах настроен Notification. Всё отлично работало пока не были включены правила для этих таблиц.
Как только включил, вылетает на регистрации этих таблиц с ошибкой "ORA-28112: сбой при выполнении функции методики".
Для теста, повторил на Delphi - там полет нормальный.
Запросы на прямую от разных пользователей отрабатывает отлично, как и требуется (выполняю из PLSQL Developer, OraDeveloper Studio). А вот в приложении на C# тупо падает и всё.. :(
вот код регистрации:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
        public void InitDB(OnChangeEventHandler ev)
        {
            try
            {
                con = new OracleConnection("Data Source=CIS;Password=1111;Persist Security Info=True;User ID=USHO");
                cmd = con.CreateCommand();
                cmd.CommandType = CommandType.Text;
              //  OracleDependency.Port = 1005; 
                dep = new OracleDependency( cmd );
                
                

                cmd.Notification.IsNotifiedOnce = false;
                cmd.AddRowid = true;

                dep.OnChange += ev;
                if(con.State != ConnectionState.Open)
                    con.Open();
                try
                {

                    foreach ( String s in sDs )
                    {
                        cmd.CommandText = String.Format( "SELECT * FROM {0} WHERE ROWNUM < 1", s );
                        try
                        {
                            cmd.ExecuteNonQuery();
                        }
                        catch ( Exception ee )
                        {
                            MessageBox.Show( ee.Message );
                        }
                    }
                }
                finally
                {
                    if ( con.State == ConnectionState.Open )
                        con.Close();
                }
            }
            catch ( Exception e )
            {
                MessageBox.Show( e.Message );
            }

        }

sDs - это стринговый массив таблиц которые надо регистрировать.

Подскажите, куда копать?
вот, на всякий случай SQL
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
create OR REPLACE function nsi.security_mat ( p_schema in varchar2,p_object in varchar2 )  return varchar2
as
begin
  if( ( user != 'NSI' )AND( user != 'ADM' ) )then
    return 'MAT_HIDE = 0';
  else
    return '1=1';
  end if;
end;

begin
   dbms_rls.add_policy
    ( object_schema   => 'NSI',
      object_name     => 'MATERIAL_WORK',
      policy_name     => 'MAT_POLICY',
      function_schema => 'NSI',
      policy_function => 'security_mat',
      statement_types => 'select',
      update_check    => FALSE );
end;
...
Рейтинг: 0 / 0
ORA-28112: сбой при выполнении функции методики
    #37304374
Edkonst2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stells2,

С каким текстом ошибки падает?
...
Рейтинг: 0 / 0
ORA-28112: сбой при выполнении функции методики
    #37308616
Фотография stells2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Edkonst2008С каким текстом ошибки падает?

ee.Message "ORA-28112: сбой при выполнении функции методики"

"Oracle Data Provider for .NET"
StackTrace =
Код: plaintext
1.
2.
3.
в Oracle.DataAccess.Client.OracleException.HandleErrorHelper(....) 
в Oracle.DataAccess.Client.OracleCommand.ExecuteNonQuery() 
в TestUshoNotif.dsTableAdapters.MATERIAL_WORKTableAdapter.InitDB(OnChangeEventHandler ev) 
в D:\project\TestUshoNotif\TestUshoNotif\ds.cs:строка 53

53 строка это cmd.ExecuteNonQuery();
...
Рейтинг: 0 / 0
ORA-28112: сбой при выполнении функции методики
    #37308623
Фотография stells2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дополню:
VS 2008
Oracle 11.2.0.1.0 (Linux 64)
...
Рейтинг: 0 / 0
ORA-28112: сбой при выполнении функции методики
    #37308835
Фотография stells2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нет совсем никаких идей? :(
...
Рейтинг: 0 / 0
ORA-28112: сбой при выполнении функции методики
    #37318014
mosquit2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Почему ExecuteNonQuery если используется SELECT? Вообще, хотелось бы сравнить с кодом на Delphi, который работает...
...
Рейтинг: 0 / 0
ORA-28112: сбой при выполнении функции методики
    #37327322
Фотография stells2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mosquit2Почему ExecuteNonQuery если используется SELECT? Вообще, хотелось бы сравнить с кодом на Delphi, который работает...
Потому чтто мне в общем то нет нужды в результате. И этот код отлично работает во всех приложениях.
А с Delphi..
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
 procedure  Tdm.InitNotification;
 var  q:TOraQuery;
    x,i:Integer;
 begin 
    q := TOraQuery.Create(self);
     try 
      q.Connection := ora;
      q.ChangeNotification := OraChange;
      x := Length(ListDS);
       for  i:=  0   to  x - 1   do 
       begin 
       SenMsg(MSG_SPLASH,CLASS_SPLASH, 95 ,Format('Регестрирую: %s',[ListDS[i]]));
       q.SQL.Text := Format('SELECT * FROM %s WHERE ROWNUM < 1',[ListDS[i]]);
        try 
          q.Active := true;
        finally 
          q.Active := false;
        end ;
       end ;
     finally 
      q.Active := false;
      q.Free;
     end ;
 end ;
ListDS[i] - это стринговый массив имен таблиц которые надо зарегистрировать.
...
Рейтинг: 0 / 0
ORA-28112: сбой при выполнении функции методики
    #37331816
dMazay82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Столкнулся с такой же ошибкой, если какое то решение???
...
Рейтинг: 0 / 0
ORA-28112: сбой при выполнении функции методики
    #37381661
Фотография stells2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dMazay82Столкнулся с такой же ошибкой, если какое то решение???
В связи с летом и как следствие, вялотекущей работой (отпуска и т.д.) :) решение не найдено, снял политики для того софта который вызывал сложности.
Сам вопрос открытый
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / ORA-28112: сбой при выполнении функции методики
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]