Хобрук: Ваш путь к мастерству в программировании

У меня странная ошибкаORA-00933: команда SQL неправильно завершилась для оператора APEX sql

Я пытаюсь запустить следующий код и получаю ошибку ORA-00933:

<code> --CODE B
select distinct po_details.po_id,
po_details.po_det_id,
po_details.change_order,
po_details.start_date,
po_details.end_date,
po_details.po_det_amt,
po_details.scope,
po_details.name,
po_details.po_status,
po_details.wbs
from po_details,wbs,project
where po_details.po_id = :P230_PO_ID
and po_details.wbs = wbs.wbs_number_id
and wbs.po_number_id = :P230_PO_NUMBER
and substr(wbs.wbs_number_id,1,6) = project.wbs_Sequence
and project.project_number = nvl(substr(:F101_FPC_NUMBER,1,10),project.project_number))
</code>

Я не вижу, где моя инструкция SQL ошибочна.

Этот оператор SQL (CODE B) был попыткой упростить код для приложения APEX, которое выдает ошибку с другим сообщением об ошибке только при попытке обновить экран после пользовательской проверки. Очень надоедливый. Первоначально оператор SQL (CODE A) выглядел так:

<code> --CODE A
select po_details.po_id,
po_details.po_det_id,
po_details.change_order,
po_details.start_date,
po_details.end_date,
po_details.po_det_amt,
po_details.scope,
po_details.name,
po_details.po_status,
po_details.wbs
from PO_DETAILS
where po_details.po_id = :P230_PO_ID
and po_details.wbs in (select distinct wbs.wbs_number_id 
from wbs, project
where wbs.po_number_id = :P230_PO_NUMBER
and substr(wbs.wbs_number_id,1,6) = project.wbs_sequence
and project.project_number = nvl(substr(:F101_FPC_NUMBER,1,10),project.project_number))
order by po_details.change_order
</code>

Сообщение об ошибке, которое я получаю для этого оператора CODE A sql в APEX, таково: report error: ORA-01445: cannot select ROWID from, or sample, a join view without a key-preserved table ORA-06510: PL/SQL: unhandled user-defined exception

... и люди сказали мне, что если я использую представление (код B, написанный перед созданием представления), это решит эту проблему с ошибкой обновления. Какая? Все эти обручи только для обновления? Если я смогу понять сообщение об ошибке ORA-00933, возможно, я смогу продолжить. Кажется, я гоняюсь за радугой вместо того, чтобы куда-то добраться. Какие-либо предложения? Спасибо!


Ответы:


1

Для вашего ORA-00933 у вас есть дополнительная скобка в последней строке:

and project.project_number = nvl(substr(:F101_FPC_NUMBER,1,10),project.project_number))

Которые должны быть:

and project.project_number = nvl(substr(:F101_FPC_NUMBER,1,10),project.project_number)

Ваш блок «код А» идентичен блоку «код Б», а также имеет ту же дополнительную скобку. Я не понимаю, как это может привести к ошибке, которую вы показали, даже без этого, поэтому я думаю, что вы, возможно, вставили туда неправильный код?

12.12.2013
  • Не могу поверить, что скопировал тот же код! АРХ! Я обновил свой вопрос с правильным кодом. Спасибо за наблюдение. 13.12.2013
  • Так я обнаружил, в чем заключалась первоначальная проблема. Похоже, что в моем операторе SQL для раздела «Подробности» моей страницы «Основные сведения» было предложение «упорядочить по», которое вызвало ошибку ORA-01445. Как только я убрал пункт «заказать», все заработало! Мое обновление теперь успешно! 13.12.2013
  • Новые материалы

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

    Как свинг-трейдеры могут использовать ИИ для больших выигрышей
    По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

    Как построить любой стол
    Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

    Обзор: Машинное обучение: классификация
    Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

    Разработка расширений Qlik Sense с qExt
    Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..