Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Ошибка ORA-00942 left join в procedure, в declare - нет / 16 сообщений из 16, страница 1 из 1
06.01.2018, 19:41
    #39580134
Santas_M
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка ORA-00942 left join в procedure, в declare - нет
Всем доброго времени суток!
Написал 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
06.01.2018, 19:57
    #39580138
Ошибка ORA-00942 left join в procedure, в declare - нет
Santas_M,

не нужно смешивать в одном запросе "старообрядный" "через-запятушечный" синтаксис джойнов и новомодный ANSI-шный....
...
Рейтинг: 0 / 0
06.01.2018, 20:04
    #39580140
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка ORA-00942 left join в procedure, в declare - нет
Santas_Mкомпилируется без проблемЛюбое дерьмо, завёрнутое в динамику, всегда компилируется, но не исполняется.
...
Рейтинг: 0 / 0
06.01.2018, 20:04
    #39580141
Santas_M
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка ORA-00942 left join в procedure, в declare - нет
Добрый Э - Эх,
Ну дело вовсе не в этом) Берем, добавляем 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
06.01.2018, 20:06
    #39580143
Santas_M
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка ORA-00942 left join в procedure, в declare - нет
ElicSantas_Mкомпилируется без проблемЛюбое дерьмо, завёрнутое в динамику, всегда компилируется, но не исполняется.
Согласен, вот только почему в declare корректно всё отрабатывает?
...
Рейтинг: 0 / 0
06.01.2018, 20:07
    #39580144
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка ORA-00942 left join в procedure, в declare - нет
Santas_MНу дело вовсе не в этом) Берем, добавляем execute immediate и..... ничего не меняется.Маразм крепчал. Ты убери .
...
Рейтинг: 0 / 0
06.01.2018, 20:07
    #39580145
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка ORA-00942 left join в procedure, в declare - нет
Santas_Mвот только почему в declare корректно всё отрабатывает?Тебе показалось ввиду отсутствия квалификации.
...
Рейтинг: 0 / 0
06.01.2018, 20:24
    #39580151
Santas_M
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка ORA-00942 left join в procedure, в declare - нет
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
06.01.2018, 20:25
    #39580152
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка ORA-00942 left join в procedure, в declare - нет
Santas_Mвот только почему в declare корректно всё отрабатывает?В анонимном блоке, неквалифицированный.
RTFM ТОП №4
...
Рейтинг: 0 / 0
06.01.2018, 21:55
    #39580184
flexgen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка ORA-00942 left join в procedure, в declare - нет
Santas_M,

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



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

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

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

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

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

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

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

....
stax
...
Рейтинг: 0 / 0
09.01.2018, 11:01
    #39580869
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка ORA-00942 left join в procedure, в declare - нет
Stax99% у Вас нет прав на insert в aaaНа тебе 1%:
Santas_M
Код: plsql
1.
PL/SQL: ORA-00942: table or view does not exist - ссылается на LEFT JOIN FFF
...
Рейтинг: 0 / 0
09.01.2018, 11:14
    #39580876
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка ORA-00942 left join в procedure, в declare - нет
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
09.01.2018, 11:58
    #39580925
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка ORA-00942 left join в procedure, в declare - нет
Staxнет прямого праваА что написано в ТОП №4?
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Ошибка ORA-00942 left join в procedure, в declare - нет / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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