powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Ошибка ORA-00942 left join в procedure, в declare - нет
16 сообщений из 16, страница 1 из 1
Ошибка ORA-00942 left join в procedure, в declare - нет
    #39580134
Santas_M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем доброго времени суток!
Написал pl/sql код с declare, проверил, всё работает, создал процедуру - компилируется без проблем, но при попытке вызвать процедуру получаю ошибку, которая ссылается на строки кода, где происходит
Код: plsql
1.
execute immediate 'insert into AAA...


Полный текст вызова процедуры с кодами ошибок:
Код: plsql
1.
2.
3.
4.
5.
SQL> exec SCHED_DATA;
begin SCHED_DATA; end;
ORA-00942: table or view does not exist
ORA-06512: at "LIVE.SCHED_DATA", line 43
ORA-06512: at line 1


Текст кода:
create or replace procedure
Код: plsql
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.
create or replace procedure SCHED_DATA

is
   type auth_cursor is ref cursor;
   v_count number; 
   c_ref auth_cursor;   
   /*variables*/
  
begin  
  execute immediate 'insert into AAA (/*fields*/)
  select 
       /*fields*/        
  from CCC,
       DDD,
       EEE
       LEFT JOIN FFF WEB ON WEB.C_ID = EEE.S_ID AND WEB.X_CMT_ID=12
       LEFT JOIN FFF EMAIL ON EMAIL.C_ID = EEE.S_ID AND EMAIL.X_CMT_ID=9
       LEFT JOIN FFF TEL ON TEL.C_ID = EEE.S_ID AND TEL.X_CMT_ID=1
 WHERE EEE.CMS_CA_ID IN (1, 2)
   AND CCC.AD_CMS_ID=EEE.CMS_ID
   AND DDD.CF_CMS_ID=EEE.CMS_ID';
  
  insert into BBB 
  select * from  AAA
  minus
  select * from  OOO;
  ..... ....    
    commit;
end;


declare
Код: plsql
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.
declare
   type auth_cursor is ref cursor;
   v_count number; 
   c_ref auth_cursor;   
   /*variables*/
   
begin  
  execute immediate 'insert into AAA (/*fields*/)
  select 
       /*fields*/        
  from CCC,
       DDD,
       EEE
       LEFT JOIN FFF WEB ON WEB.C_ID = EEE.S_ID AND WEB.X_CMT_ID=12
       LEFT JOIN FFF EMAIL ON EMAIL.C_ID = EEE.S_ID AND EMAIL.X_CMT_ID=9
       LEFT JOIN FFF TEL ON TEL.C_ID = EEE.S_ID AND TEL.X_CMT_ID=1
 WHERE EEE.CMS_CA_ID IN (1, 2)
   AND CCC.AD_CMS_ID=EEE.CMS_ID
   AND DDD.CF_CMS_ID=EEE.CMS_ID';
  
  insert into BBB 
  select * from  AAA
  minus
  select * from  OOO;
  ..... ....        
end;


Помогите кто чем может, явно дело в запросе с LEFT JOIN - некорректно обрабатывается в процедуре, но видимо праздники дают о себе знать.
Заранее благодарен за помощь.
...
Рейтинг: 0 / 0
Ошибка ORA-00942 left join в procedure, в declare - нет
    #39580138
Santas_M,

не нужно смешивать в одном запросе "старообрядный" "через-запятушечный" синтаксис джойнов и новомодный ANSI-шный....
...
Рейтинг: 0 / 0
Ошибка ORA-00942 left join в procedure, в declare - нет
    #39580140
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Santas_Mкомпилируется без проблемЛюбое дерьмо, завёрнутое в динамику, всегда компилируется, но не исполняется.
...
Рейтинг: 0 / 0
Ошибка ORA-00942 left join в procedure, в declare - нет
    #39580141
Santas_M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый Э - Эх,
Ну дело вовсе не в этом) Берем, добавляем execute immediate и..... ничего не меняется.

Код: plsql
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.
create or replace procedure SCHED_DATA

is
   type auth_cursor is ref cursor;
   v_count number; 
   c_ref auth_cursor;   
   /*variables*/
  
begin  
  execute immediate 'insert into AAA (/*fields*/)
  select 
       /*fields*/        
  from CCC,
       DDD,
       EEE
       LEFT JOIN FFF WEB ON WEB.C_ID = EEE.S_ID AND WEB.X_CMT_ID=12
       LEFT JOIN FFF EMAIL ON EMAIL.C_ID = EEE.S_ID AND EMAIL.X_CMT_ID=9
       LEFT JOIN FFF TEL ON TEL.C_ID = EEE.S_ID AND TEL.X_CMT_ID=1
 WHERE EEE.CMS_CA_ID IN (1, 2)
   AND CCC.AD_CMS_ID=EEE.CMS_ID
   AND DDD.CF_CMS_ID=EEE.CMS_ID';
  
  execute immediate 'insert into BBB 
  select * from  AAA
  minus
  select * from  OOO';
  ..... ....    
    commit;
end;


...
Рейтинг: 0 / 0
Ошибка ORA-00942 left join в procedure, в declare - нет
    #39580143
Santas_M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicSantas_Mкомпилируется без проблемЛюбое дерьмо, завёрнутое в динамику, всегда компилируется, но не исполняется.
Согласен, вот только почему в declare корректно всё отрабатывает?
...
Рейтинг: 0 / 0
Ошибка ORA-00942 left join в procedure, в declare - нет
    #39580144
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Santas_MНу дело вовсе не в этом) Берем, добавляем execute immediate и..... ничего не меняется.Маразм крепчал. Ты убери .
...
Рейтинг: 0 / 0
Ошибка ORA-00942 left join в procedure, в declare - нет
    #39580145
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Santas_Mвот только почему в declare корректно всё отрабатывает?Тебе показалось ввиду отсутствия квалификации.
...
Рейтинг: 0 / 0
Ошибка ORA-00942 left join в procedure, в declare - нет
    #39580151
Santas_M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic,
Ну началось...
Извини что уж побеспокоил, забей)

Если убрать execute immediate, то получаем следующее:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
create or replace procedure SCHED_DATA

is
   type auth_cursor is ref cursor;
   v_count number; 
   c_ref auth_cursor;   
   /*variables*/
  
begin  
insert into AAA (/*fields*/)
  select 
       /*fields*/        
  from CCC,
       DDD,
       EEE
       LEFT JOIN FFF WEB ON WEB.C_ID = EEE.S_ID AND WEB.X_CMT_ID=12
       LEFT JOIN FFF EMAIL ON EMAIL.C_ID = EEE.S_ID AND EMAIL.X_CMT_ID=9
       LEFT JOIN FFF TEL ON TEL.C_ID = EEE.S_ID AND TEL.X_CMT_ID=1
 WHERE EEE.CMS_CA_ID IN (1, 2)
   AND CCC.AD_CMS_ID=EEE.CMS_ID
   AND DDD.CF_CMS_ID=EEE.CMS_ID;
  ..... ....    
    commit;
end;


После этого выходит ошибка:
Код: plsql
1.
2.
PL/SQL: ORA-00942: table or view does not exist - ссылается на LEFT JOIN FFF
PL/SQL: SQL Statement ignored - ссылается на insert into AAA
...
Рейтинг: 0 / 0
Ошибка ORA-00942 left join в procedure, в declare - нет
    #39580152
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Santas_Mвот только почему в declare корректно всё отрабатывает?В анонимном блоке, неквалифицированный.
RTFM ТОП №4
...
Рейтинг: 0 / 0
Ошибка ORA-00942 left join в procedure, в declare - нет
    #39580184
flexgen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Santas_M,

Код: plsql
1.
ORA-00942: table or view does not exist



А если почитать что означает эта ошибка? Сама таблица FFF существует в твоей схеме? А если она в другой схеме - есть ли необходимые права на эту таблицу?
...
Рейтинг: 0 / 0
Ошибка ORA-00942 left join в procedure, в declare - нет
    #39580242
alex-ls
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот к чему приводит найм сотрудников на низкую зп... даже элементарные вещи в справке не могут посмотреть...
...
Рейтинг: 0 / 0
Ошибка ORA-00942 left join в procedure, в declare - нет
    #39580420
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
flexgenА если почитать что означает эта ошибка? Сама таблица FFF существует в твоей схеме? А если она в другой схеме - есть ли необходимые права на эту таблицу?

Во-первых, процедура-то с DEFINER rights, посему не в "твоей" схеме а в схеме владельца SP (и не факт что тaблица - view, mview, синоним...). Во-вторых, если бы таблица FFF сущестовала в схеме владельца SP, то SP бы выполнялась без прoблем.

SY.
...
Рейтинг: 0 / 0
Ошибка ORA-00942 left join в procedure, в declare - нет
    #39580859
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Santas_M,

99% у Вас нет прав на insert в aaa напрямую (есть права через роль)

проверить очень просто

создаете тестовую процедурку с
....
insert into AAA(pole) values(1111);
rollback;
end;

если слетит, надо получить права напрямую

....
stax
...
Рейтинг: 0 / 0
Ошибка ORA-00942 left join в procedure, в declare - нет
    #39580869
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax99% у Вас нет прав на insert в aaaНа тебе 1%:
Santas_M
Код: plsql
1.
PL/SQL: ORA-00942: table or view does not exist - ссылается на LEFT JOIN FFF
...
Рейтинг: 0 / 0
Ошибка ORA-00942 left join в procedure, в declare - нет
    #39580876
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicStax99% у Вас нет прав на insert в aaaНа тебе 1%:
Santas_M
Код: plsql
1.
PL/SQL: ORA-00942: table or view does not exist - ссылается на LEFT JOIN FFF


да, был не прав

99% что нет прямого права на любую из ААА,CCC,DDD,FFF

.....
stax
...
Рейтинг: 0 / 0
Ошибка ORA-00942 left join в procedure, в declare - нет
    #39580925
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxнет прямого праваА что написано в ТОП №4?
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Ошибка ORA-00942 left join в procedure, в declare - нет
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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