[Oracle PL/SQL] Table or View does not exist

[Oracle PL/SQL] Table or View does not exist
C6
  • Rejestracja:ponad 11 lat
  • Ostatnio:6 dni
  • Postów:197
0

Mam pewien problem.

Posiadam dwoch uzytkownikow: TEST_OI i TEST_OI_ST

Na uzytkowniku TEST_OI_ST tworze package: PK o tresci:

Kopiuj
create or replace PACKAGE                             "PK  AS 

PROCEDURE PR_1;
PROCEDURE PR_2;

END PK;

Nastepnie chce utworzyc package body:

Kopiuj
create or replace PACKAGE BODY                                          "PK" AS

  PROCEDURE PR_1 AS
  BEGIN
              merge into **TEST_OI.T_SPR** x
            using (
code
) ;




             update **TEST_OBI.t_spr**
code 
end;
  update **TEST_OI.T_OS** code ;
  update **TEST_OI.T_OS2** code ; 

  END PR_1;

  PROCEDURE PR_2 AS
  BEGIN
     merge into **TEST_OI.T_D_P** a
                using(
code b
                    ) b
                 code;

END PK

Problem pojawia sie gdy kompiluje:

Kopiuj
5,15	PL/SQL: SQL Statement ignored	ERROR
5,35	PL/SQL: ORA-00942: table or view does not exist	ERROR

Tak jakby uzytkownik T_OI_ST nie widzial tabeli T_OI.T_SPR i wszystkich innych ze schematu T_OI.
Jednak jak zrobie na uzytkowniku T_OI_ST zapytanie, np:

Kopiuj
select * from T_OI.T_SPR;

To zapytanie dziala poprawnie, rowniez dla innych tabel z tego uzytkownika moge podgladnac dane.
Gdzie jeszcze jest jakies security lub jak skompilowac lub sprawdzic czemu wyrzuca blad w packagebody ze nie widzi tabel?

abrakadaber
abrakadaber
  • Rejestracja:ponad 12 lat
  • Ostatnio:8 miesięcy
  • Postów:6610
0

z tego kodu ciężko cokolwiek powiedzieć.


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
C6
  • Rejestracja:ponad 11 lat
  • Ostatnio:6 dni
  • Postów:197
0
abrakadaber napisał(a):

z tego kodu ciężko cokolwiek powiedzieć.

W sumie rzecz polega na tym, ze tworzac procedure w package body na uzytkowniku TEST_OI_ST, ktora zawiera np. merge into TEST_OI.JAKAS_TABELA - zostaje mi wyrzucony blad ze table or view does no exist. I tyczy sie to wszystkich odwolan do tabel z inengo uzytkownika. Natomiast jak sprawdza poprzez select * from TEST_OI.JAKAS TABELA - to zawsze dostaje wyniki.

abrakadaber
abrakadaber
  • Rejestracja:ponad 12 lat
  • Ostatnio:8 miesięcy
  • Postów:6610
0

jeśli nie miałbyś uprawnień (bo możesz nie mieć uprawnień do obiektów innego schematu) to byś dostał inny komunikat. Możesz spróbować utworzyć synonimy do obiektów w innym schemacie. Co do tego, że ciężko coś powiedzieć to chodziło mi o to, że Twój kod (a przynajmniej to co z niego zostało) nie zawiera błędu z formalnej strony a błąd może być całkiem gdzie indziej.


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:3 dni
  • Lokalizacja:Wrocław
0
abrakadaber napisał(a):

jeśli nie miałbyś uprawnień (bo możesz nie mieć uprawnień do obiektów innego schematu) to byś dostał inny komunikat.

No nie wiem czy inny. Ja dokładnie taki dostaję gdy używany przeze mnie użytkownik nie ma dostępu do tabeli czy widoku.

YA
  • Rejestracja:prawie 10 lat
  • Ostatnio:13 dni
  • Postów:2370
0
  1. Weź sobie dobrze sprawdź nazwy schematów.
Kopiuj
     merge into **TEST_OI.T_SPR** x
     update **TEST_OBI.t_spr**

TEST_OI vs TEST_OBI

  1. Zobacz jak masz uprawnienia nadane do tego drugiego schematu. Nie mogą być przez rolę, tylko muszą być bezpośrednio jak chcesz używać wewnątrz pakietu.
Kacper Słotwiński
  • Rejestracja:prawie 4 lata
  • Ostatnio:prawie 4 lata
  • Postów:2
0

Mam bardzo podobny problem, próbując użyć zapytania select odnoszącego się do tabeli z bazy A w procedurze z bazy B dostaję komunikat:
screenshot-20210509172222.png
przy użyciu tego samego zapytania bezpośrednio w oknie dialogowym bazy B wszstko działa bez problemu. Czy w takim wypadku może to być problem dostępów jednej bazy do drugiej?

abrakadaber
abrakadaber
  • Rejestracja:ponad 12 lat
  • Ostatnio:8 miesięcy
  • Postów:6610
1

nie, gdybyś nie miał dostępu to byś dostał inny komunikat - jak chcesz się z bazy A dostać do tabeli z bazy B to musisz się odwołać do tabeli przez nazwę bazy, np. SELECT * FROM B.tabela


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
Kacper Słotwiński
  • Rejestracja:prawie 4 lata
  • Ostatnio:prawie 4 lata
  • Postów:2
0

Dokładnie w taki sposób zbudowałem zapytanie.
Moim problemem jest to że zapytanie wywołane w kodzie procedury bazy A odnoszące się do tabeli bazy B wyrzuca błąd a dokłdanie to samo zapytanie odpalone także z bazy A odpalone osobno także odnoszące sie do tabeli z bazy B działa bez zarzutu.
Czy istnieją ograniczenia, które mogą nie pozwalać na wywoływanie zapytań do tabeli z innych baz w procedurach?
Z góry dziękuję za pomoc.

abrakadaber
abrakadaber
  • Rejestracja:ponad 12 lat
  • Ostatnio:8 miesięcy
  • Postów:6610
1

Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
Kacper Słotwiński
Dziękuję za pomoc! rzeczywiście problem odnoszenia się do tabeli z zewnętrznych baz danych, róznicy dostępu poprzez rolę i bezpośrednie uprawnienia. Niestety w moim przypadku administrator nie wyrazi zgody na przydzilenie bezpośrednich dostępów i będe musiał wymyśleć obejście problemu ale jestem już o krok dalej. Jeszcze raz wielkie dzięki :)
abrakadaber
abrakadaber
spróbuj w "swojej" bazie zrobić widok z tabeli z "obcej" bazy a w procedurze odwołać się do widoku, chociaż wątpię aby to zadziałało
woolfik
  • Rejestracja:ponad 17 lat
  • Ostatnio:około 12 godzin
  • Postów:1597
1

Jeżeli działa Ci zapytanie z nazwą schematu to po prostu dodaj sobie publiczny synonim na tą tabelę i po problemie :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.