Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Вызов табличной функции другим пользователем -> ORA-00902  [new]
Sergey Balter
Member

Откуда: Ruppiner Land
Сообщений: 1012
Какие гранты нужно передать пользователю, чтобы он мог выполнить вызов табличной функции из (пакета) ДРУГОЙ схемы? Можно ли это делать опосредованно, через роль?

Oracle 9.2.0.6 Win

У меня не выходит, получаю ошибку ORA-00902 Invalid Type или ORA-00902 Invalid Identifier.

Нужно ли поднимать номер версии?

Пример.
SQL> create user test_Owner identified by test_owner;

Benutzer wurde angelegt.

SQL> create user test_exec identified by test_exec;

Benutzer wurde angelegt.

SQL> grant connect, resource to test_owner;

Benutzerzugriff (Grant) wurde erteilt.

SQL> grant connect, resource to test_exec;

Benutzerzugriff (Grant) wurde erteilt.

SQL> connect test_owner/test_owner;
Connect durchgeführt.
SQL> CREATE OR REPLACE TYPE Testtyp AS Table of Number
  2  /

Typ wurde erstellt.

SQL> CREATE OR REPLACE FUNCTION TESTFUNC return Testtyp
  2  as
  3  begin
  4    return Testtyp(1, 2);
  5  end;
  6  /

Funktion wurde erstellt.

SQL> GRANT EXECUTE ON Testtyp TO TEST_Exec;

Benutzerzugriff (Grant) wurde erteilt.

SQL> GRANT EXECUTE ON Testfunc TO TEST_Exec;

Benutzerzugriff (Grant) wurde erteilt.

SQL> SELECT * FROM Table(CAST(Testfunc AS Testtyp));

COLUMN_VALUE                                                                    
------------                                                                    
           1                                                                    
           2                                                                    

SQL> connect test_exec/test_exec;
Connect durchgeführt.
SQL> SELECT * FROM Table(CAST(Testfunc AS Testtyp));
SELECT * FROM Table(CAST(Testfunc AS Testtyp))
                                     *
FEHLER in Zeile 1:
ORA-00902: Ungültiger Datentyp 
28 май 08, 17:48    [5729149]     Ответить | Цитировать Сообщить модератору
 Re: Вызов табличной функции другим пользователем -> ORA-00902  [new]
Madness
Member

Откуда: Москва
Сообщений: 648
Sergey Balter

SELECT * FROM Table(CAST(Testfunc AS Testtyp))
                                     *
FEHLER in Zeile 1:
ORA-00902: Ungültiger Datentyp 

А имя схемы владельца указать?
28 май 08, 17:52    [5729181]     Ответить | Цитировать Сообщить модератору
 Re: Вызов табличной функции другим пользователем -> ORA-00902  [new]
Sergey Balter
Member

Откуда: Ruppiner Land
Сообщений: 1012
Сорри, тестовый пример неудачный. Во-первых, пропущен
ALTER SESSION SET CURRENT_SCHEMA = test_owner
а если добавить это дело, то все работает.

В оригинальном варианте используется более сложный случай, там падает ORA-00902
Попробую его упростить и выложу другой тестовый пример...
28 май 08, 18:03    [5729295]     Ответить | Цитировать Сообщить модератору
 Re: Вызов табличной функции другим пользователем -> ORA-00902  [new]
Sergey Balter
Member

Откуда: Ruppiner Land
Сообщений: 1012
В общем, в данной версии 9.2.0.6 Win при использовании в SELECT внутри конструкции WITH табличной функции выпадает
ORA-00чего-то там Ошибка SQL на рекурсивном уровне 1
ORA-00902 неизвестный тип.
Переписал запрос без WITH - сразу полегачало, хотя теперь работает медленнее...
Копать дальше нет времени и желания.
28 май 08, 20:11    [5729812]     Ответить | Цитировать Сообщить модератору
 Re: Вызов табличной функции другим пользователем -> ORA-00902  [new]
xymbo
Member

Откуда: Донской --> Москва
Сообщений: 2560
Sergey Balter
В общем, в данной версии 9.2.0.6 Win при использовании в SELECT внутри конструкции WITH табличной функции выпадает
ORA-00чего-то там Ошибка SQL на рекурсивном уровне 1
ORA-00902 неизвестный тип.
Переписал запрос без WITH - сразу полегачало, хотя теперь работает медленнее...
Копать дальше нет времени и желания.

Известная бага, если в WITH использовать функции. У меня падало, когда в WITH использовал вьюхи, в которых были функции. Такая проблема на 9, на 10 такого уже нет.
28 май 08, 20:53    [5729905]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить