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

0

Mam pewien problem.

Posiadam dwoch uzytkownikow: TEST_OI i TEST_OI_ST

Na uzytkowniku TEST_OI_ST tworze package: PK o tresci:

create or replace PACKAGE                             "PK  AS 

PROCEDURE PR_1;
PROCEDURE PR_2;

END PK;

Nastepnie chce utworzyc package body:

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:

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:

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?

0

z tego kodu ciężko cokolwiek powiedzieć.

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.

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.

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.

0
  1. Weź sobie dobrze sprawdź nazwy schematów.
     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.
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?

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

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.

1

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1