powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / При применении в запросе конструкции when case выдает ошибку ora-00907 missing Parenthesis
18 сообщений из 18, страница 1 из 1
При применении в запросе конструкции when case выдает ошибку ora-00907 missing Parenthesis
    #39276032
armando
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
При применении в запросе конструкции when case выдает ошибку ora-00907 missing right Parenthesis.

Select id, type_id, title,text
from fact
where
(case
when (select access1 from access)=1 then id<300 and type_id<>24 and length(text)>0
when (select access1 from access)=2 then id<300 and length(text)>0
when (select access1 from access)=3 then length(text)>0
else 0
end)=1
...
Рейтинг: 0 / 0
При применении в запросе конструкции when case выдает ошибку ora-00907 missing Parenthesis
    #39276034
armando
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
armando,
Причем ругается на знаки сравнения "<" и "<>"
...
Рейтинг: 0 / 0
При применении в запросе конструкции when case выдает ошибку ora-00907 missing Parenthesis
    #39276035
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
armando,

подумайте что написали
Код: plsql
1.
2.
3.
case
when (select access1 from access)=1 then id<300 and type_id<>24 and length(text)>0
end)=1
...
Рейтинг: 0 / 0
При применении в запросе конструкции when case выдает ошибку ora-00907 missing Parenthesis
    #39276038
when ругается на знаки сравнения "<" и "<>" then можно было и задуматься.
...
Рейтинг: 0 / 0
При применении в запросе конструкции when case выдает ошибку ora-00907 missing Parenthesis
    #39276048
jabik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
armandoПри применении в запросе конструкции when case выдает ошибку ora-00907 missing right Parenthesis.

Select id, type_id, title,text
from fact
where
(case
when (select access1 from access)=1 then id<300 and type_id<>24 and length(text)>0
when (select access1 from access)=2 then id<300 and length(text)>0
when (select access1 from access)=3 then length(text)>0
else 0
end)=1

кхм,
http://docs.oracle.com/cd/B19306_01/server.102/b14200/expressions004.htm
думаю, что это тебе поможет
...
Рейтинг: 0 / 0
При применении в запросе конструкции when case выдает ошибку ora-00907 missing Parenthesis
    #39276203
Valergrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Трудно даже понять что вы вообще хотели.
Код: plsql
1.
[src]id < 300 and lenght(text) > 0 

[/SRC]
Oracle не воспринимает как выражение, это вам не С. А что вы ожидали, что это выражение вернет? True/False? Нет, булевского типа нет в sql. И почему тогда вы сравниваете это с единицей?
...
Рейтинг: 0 / 0
При применении в запросе конструкции when case выдает ошибку ora-00907 missing Parenthesis
    #39276240
armando
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valergrad,
Простой запрос, который должен работать. Переписал его согласно документации, та же ошибка
а в конце 'end)=1' добавил по примеру. У меня задача по значению поля access1 из таблицы access(права доступа) изменять условия выборки из таблицы fact

Select t.id, t.type_id, t.title,t.text
from fact t
where
(case (select access1 from access)
when 1 then t.id<300 and t.type_id<>24 and length(t.text)>0
when 2 then t.id<300 and length(t.text)>0
when 3 then t.type_id<>24 and length(t.text)>0
when 4 then length(t.text)>0
else 0
end);
...
Рейтинг: 0 / 0
При применении в запросе конструкции when case выдает ошибку ora-00907 missing Parenthesis
    #39276247
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
armandoПереписал его согласно документации
и где вы нашили такую кривую документацию ?
...
Рейтинг: 0 / 0
При применении в запросе конструкции when case выдает ошибку ora-00907 missing Parenthesis
    #39276258
armando
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
123йй,
Ну ты знаешь ты - умный. Помоги переписать запрос
...
Рейтинг: 0 / 0
При применении в запросе конструкции when case выдает ошибку ora-00907 missing Parenthesis
    #39276264
armando,

не можешь освоить case, попробуй join.
...
Рейтинг: 0 / 0
При применении в запросе конструкции when case выдает ошибку ora-00907 missing Parenthesis
    #39276268
armando
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
однострочный access,
Вместо отсылок к первоисточникам - модно помочь написать запрос?
...
Рейтинг: 0 / 0
При применении в запросе конструкции when case выдает ошибку ora-00907 missing Parenthesis
    #39276280
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
armandoВместо отсылок к первоисточникам - модно помочь написать запрос? Там модно отсылать не будут.
...
Рейтинг: 0 / 0
При применении в запросе конструкции when case выдает ошибку ora-00907 missing Parenthesis
    #39276283
armando
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic,
в where case выраджение then 1 не получается
...
Рейтинг: 0 / 0
При применении в запросе конструкции when case выдает ошибку ora-00907 missing Parenthesis
    #39276313
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
armandoв where case выраджение then 1 не получается http://www.bugtraq.ru/forum/faq/general/smart-questions.html] RTFM
...
Рейтинг: 0 / 0
При применении в запросе конструкции when case выдает ошибку ora-00907 missing Parenthesis
    #39276326
Бельфя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Предполагаю, что имелось ввиду что-то такое, но таблица access должна содержать только одну запись иначе будет ошибка.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select t.id
      ,t.type_id
      ,t.title
      ,t.text
  from fact t
 where ((select access1
           from access) = 1 and t.id < 300 and t.type_id <> 24 and length(t.text) > 0)
    or ((select access1
           from access) = 2 and t.id < 300 and length(t.text) > 0)
    or ((select access1
           from access) = 3 then t.type_id <> 24 and length(t.text) > 0)
    or ((select access1
           from access) = 4 then length(t.text) > 0)
...
Рейтинг: 0 / 0
При применении в запросе конструкции when case выдает ошибку ora-00907 missing Parenthesis
    #39276837
armando
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Бельфя,
Спасибо!
Коллега помог сделать точно такой же запрос, но работает он очень медлено!
Там проверяются все 4 условия.
Поэтому я надеюсь переделать его через case when для убыстрения исполнения запроса.
...
Рейтинг: 0 / 0
При применении в запросе конструкции when case выдает ошибку ora-00907 missing Parenthesis
    #39276884
Бельфя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
armando, case в таком виде пониматься ораклом не будет.
А если заменить "length(t.text) > 0" на "t.text is not null" работать быстрее не начинает?
...
Рейтинг: 0 / 0
При применении в запросе конструкции when case выдает ошибку ora-00907 missing Parenthesis
    #39276910
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
armandoПоэтому я надеюсь переделать его через case when для убыстрения исполнения запроса.Намёк:
Код: plsql
1.
2.
3.
4.
case … when … then case when … then 1 end
       when … then case when … then 1 end
       …
end = 1
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / При применении в запросе конструкции when case выдает ошибку ora-00907 missing Parenthesis
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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