Error report unknown command

ANT — ошибка выполнения PLSQL У меня есть несколько сценариев sql (некоторые sql и некоторые plsql) для выполнения с помощью ant. Прежде чем я начну выполнение, мне нужно убедиться, что файлы исполняемые. Итак, я запускаю следующую цель, чтобы создать исполняемый файл sql и plsql из ant. И PLSQL в файле файл выглядит примерно так: […]

Содержание

  1. ANT — ошибка выполнения PLSQL
  2. Ошибка получения неизвестной команды в IF-THEN-ELSE
  3. 2 ответа
  4. SP2-0552: Переменная привязки «NEW» не объявлена ​​и отчет об ошибке END — неизвестная команда
  5. 1 ответ
  6. ANT — ошибка выполнения PLSQL
  7. 1 ответ
  8. ANT — ошибка выполнения PLSQL

ANT — ошибка выполнения PLSQL

У меня есть несколько сценариев sql (некоторые sql и некоторые plsql) для выполнения с помощью ant. Прежде чем я начну выполнение, мне нужно убедиться, что файлы исполняемые. Итак, я запускаю следующую цель, чтобы создать исполняемый файл sql и plsql из ant.

И PLSQL в файле файл выглядит примерно так:

что когда ant target makeExecutableSQLs запускает выходные данные —

но это при запуске позже не работает из-за этой ошибки —

Error starting at line : 1 in command — BEGIN FOR c IN —query LOOP dbms_utility.blah Error report — ORA-06550: line 9, column 135: PLS-00103: Encountered the symbol «end-of-file» when expecting one of the following:

Не могу понять, где ошибка?

Вы спрашиваете, почему возникают ошибки PL / SQL или почему pattern=»;» replace=»$/» повреждает PL / SQL (и тем самым вызывает эти ошибки)?

Я знаю, что replace = «$ /» вызывает ошибку «расширенного» сценария. Но для SQL это работает хорошо. Но пока я хочу знать, почему возникает эта ошибка PLSQL.

В языке PL / SQL в качестве признака конца команды используется ; , а не / , который является оператором деления. Очевидно, что задача состоит в том, чтобы не дать вашему скрипту Ant испортить ваш PL / SQL, вставив в него недопустимые символы. Я не знаю Ant, так что, может быть, это будет действительно сложно.

Ошибки PL / SQL возникают из-за того, что вы заменили разделители операторов PL / SQL точкой с запятой на терминаторы блока.

Когда компилятор видит / , он завершает работу и выполняет команду в буфере, поэтому он видит и пытается скомпилировать и запустить

как автономный полный блок PL / SQL. Как ошибка, которую вы получаете от этого

ORA-06550: line 9, column 135: PLS-00103: Encountered the symbol «end-of-file» .

указывает, что очевидно завершенный блок заканчивается раньше положенного срока. После blah нет терминатора оператора точки с запятой, но также нет end loop или end для блока — в этом коде он пытается выполнить. По сути, он не видел остальной части сценария.

Затем он продолжает и пытается интерпретировать следующий фрагмент.

что также недействительно; клиент даже не пытается выполнить это, потому что не знает, что с этим делать.

Затем следующий кусок

успешно выполняется как простой оператор SQL (управление транзакциями), а не в контексте PL / SQL.

Короче говоря, вы не можете заменить точку с запятой на косую черту в блоке PL / SQL, поскольку они делают разные вещи. В простом SQL они взаимозаменяемы (или, скорее, для большинства клиентов они взаимозаменяемы; по крайней мере, по умолчанию — даже в SQL * Plus вы можете изменить терминатор SQL с точки с запятой на что-то другое).

Клиент по-прежнему обрабатывает косую черту после блока PL / SQL, и когда он видит, что он отправляет блок в базу данных для выполнения. Но хотя он знает, что это блок внутри, он знает, что любые точки с запятой, которые он видит, являются частью языка PL / SQL, и не должен пытаться их интерпретировать.

Это называется в документации SQL * Plus для запуска блоков PL / SQL, и другие клиенты склонны вести себя аналогичным образом.

Execute the current subprogram with a RUN or slash ( / ) command. A semicolon ( ; ) is treated as part of the PL/SQL subprogram and will not execute the command.

Это помогает, мне нужно убедиться, что блок plsql остается неизменным, когда муравей проходит через него.

Источник

Ошибка получения неизвестной команды в IF-THEN-ELSE

У меня есть следующий запрос, который я использую в Oracle 11g

Запустив оператор, я получаю следующий вывод:

Значения вставляются с ошибкой, когда я запускаю его напрямую. Но когда я пытаюсь выполнить этот запрос через свое приложение, я получаю исключение оракула из-за сгенерированной ошибки:

И, следовательно, значения не вставляются.

Я относительно новичок в Oracle. Посоветуйте, пожалуйста, что не так с приведенным выше запросом, чтобы я мог выполнить этот запрос без ошибок.

2 ответа

Если MERGE у вас не работает, попробуйте следующее:

Здесь вы update по спецификации, затем проверьте, нашли ли вы подходящую строку, и insert , если вы этого не сделали.

«что не так с вышеуказанным запросом»

Что не так с запросом, так это то, что это не запрос (SQL). Это должен быть фрагмент программы (PL / SQL), но он не записан как блок PL / SQL, обрамленный ключевыми словами BEGIN и END; .

Но превращение его в анонимный блок PL / SQL не поможет. Oracle PL / SQL не поддерживает синтаксис IF EXISTS (select . .

К счастью, Oracle SQL поддерживает оператор MERGE, который делает то же самое, что и ваш код, с меньшим набором текста.

Кроме того, что вы также пытаетесь обновить empid . Это не поддерживается в MERGE . Почему вы хотите изменить первичный ключ?

«Нужен ли этот запрос для добавления значений во все столбцы таблицы?»

INSERT может иметь все столбцы в таблице. UPDATE не может изменить столбцы, используемые в предложении ON (обычно это первичный ключ), потому что это ограничение работы MERGE. Я думаю, что это тот же механизм сохранения ключей, который мы видим при обновлении представлений. Подробнее . ,

Источник

SP2-0552: Переменная привязки «NEW» не объявлена ​​и отчет об ошибке END — неизвестная команда

Я должен написать триггер для таблиц, которые я сделал, и при обновлении вставки я должен записать отдельную таблицу журнала для тех, которые обновляются или вставляются.

Столбцы в таблице журнала будут такими:

  • Done_process (напишет update, вставит)
  • Человек (номер студента лица, прошедшего курс лечения)
  • До (предыдущее значение для обновления, пусто для вставки)
  • После (новое значение для обновления, новое значение для вставки)

Это моя таблица student_info ,

Когда я пытаюсь запустить код, он выдает следующую ошибку:

1 ответ

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

Упомянутый вами триггер не компилируется из-за синтаксических проблем, таких как where v_id := 20201033 .

Предложение Where используется для сравнения значения, поэтому вы должны использовать = вместо := , который является оператором присваивания.

Помимо этой проблемы, есть несколько моментов, о которых еще нужно позаботиться.

  1. Дайте явное соглашение для создания локальных переменных. например вы создали локальную переменную v_id , и тот же столбец также доступен в таблице student_info . Хотя в данном случае это не проблема, рекомендуется сохранять специфичность локальной переменной, например, l_v_id .
  2. Вы использовали оператор select внутри триггера, который может привести к ошибке NO_DATA_FOUND , и вы должны обработать его либо в разделе исключений, либо другим способом использовать агрегатную функцию, например max() , если очевидно v_id является первичным ключом. Я сомневаюсь, зачем вам нужен этот оператор выбора (вы могли бы использовать между старым и новым, используя что-то вроде coalesce(:old.school_id,:new_schoold_id) , если бы я вас понял), но я бы оставил это на ваше усмотрение, чтобы решить и действовать соответствующим образом.

Учитывая вышеуказанные пункты, окончательный код будет,

ОТРЕДАКТИРОВАНО: решение проблемы с инструментом

Я сомневаюсь, что проблема связана с использованием инструмента SQL Developer, однако последняя попытка, которую я хотел бы сделать,

Шаг 1: Удалите обе таблицы, используемые с помощью команды drop.

Шаг 2: Откройте другой рабочий лист SQL, используя alt+F10 , и выполните действия, показанные на следующем рисунке. Пожалуйста, попробуйте и дайте мне знать.

Источник

ANT — ошибка выполнения PLSQL

У меня есть несколько сценариев sql (некоторые sql и некоторые plsql) для выполнения с помощью ant. Прежде чем я начну выполнение, мне нужно убедиться, что файлы исполняемые. Итак, я запускаю следующую цель, чтобы создать исполняемый файл sql и plsql из ant.

И PLSQL в файле файл выглядит примерно так:

Что когда ant target makeExecutableSQLs запускает выходные данные —

Но это при запуске позже не работает из-за этой ошибки —

Ошибка при запуске со строки: 1 в команде — НАЧАТЬ FOR c IN —query LOOP dbms_utility.blah Отчет об ошибке — ORA-06550: строка 9, столбец 135: PLS-00103: обнаружен символ «конец файла» при ожидании одного из следующих:

Не могу понять, где ошибка?

1 ответ

Ошибки PL / SQL возникают из-за того, что вы заменили разделители операторов PL / SQL точкой с запятой на терминаторы блока.

Когда компилятор видит / , он завершает работу и выполняет команду в буфере, поэтому он видит и пытается скомпилировать и запустить

Как автономный полный блок PL / SQL. Как ошибка, которую вы получаете от этого

ORA-06550: строка 9, столбец 135: PLS-00103: обнаружен символ «конец файла» .

Указывает, что очевидно завершенный блок заканчивается раньше положенного срока. После blah нет терминатора оператора с запятой, но также нет end loop или end для блока — в том коде, который он пытается выполнить. По сути, он не видел остальной части сценария.

Затем он продолжает и пытается интерпретировать следующий фрагмент.

Что также недействительно; клиент даже не пытается это выполнить, потому что не знает, что с этим делать.

Затем следующий кусок

Успешно выполняется как простой оператор SQL (управление транзакциями), а не в контексте PL / SQL.

Короче говоря, вы не можете заменить точку с запятой на косую черту в блоке PL / SQL, поскольку они делают разные вещи. В простом SQL они взаимозаменяемы (или, скорее, для большинства клиентов они взаимозаменяемы; по крайней мере, по умолчанию — даже в SQL * Plus вы можете изменить терминатор SQL с точки с запятой на что-то другое).

Клиент по-прежнему обрабатывает косую черту после блока PL / SQL, и когда он видит, что он отправляет блок в базу данных для выполнения. Но хотя он знает, что находится внутри блока, он знает, что любые точки с запятой, которые он видит, являются частью языка PL / SQL, и не должен пытаться их интерпретировать.

Об этом упоминается в документации SQL * Plus для запуска Блоки PL / SQL и другие клиенты ведут себя аналогичным образом.

Выполните текущую подпрограмму с помощью команды RUN или косой черты ( / ). Точка с запятой ( ; ) рассматривается как часть подпрограммы PL / SQL и не выполняет команду.

Источник

ANT — ошибка выполнения PLSQL

У меня есть несколько сценариев sql (некоторые sql и некоторые plsql) для выполнения с помощью ant. Прежде чем я начну выполнение, мне нужно убедиться, что файлы исполняемые. Итак, я запускаю следующую цель, чтобы создать исполняемый файл sql и plsql из ant.

И PLSQL в файле файл выглядит примерно так:

что когда ant target makeExecutableSQLs запускает выходные данные —

но это при запуске позже не работает из-за этой ошибки —

Error starting at line : 1 in command — BEGIN FOR c IN —query LOOP dbms_utility.blah Error report — ORA-06550: line 9, column 135: PLS-00103: Encountered the symbol «end-of-file» when expecting one of the following:

Не могу понять, где ошибка?

Ошибки PL / SQL возникают из-за того, что вы заменили разделители операторов PL / SQL точкой с запятой на терминаторы блока.

Когда компилятор видит, / он завершает работу и выполняет команду в буфере, поэтому он видит и пытается скомпилировать и запустить

как автономный полный блок PL / SQL. Как ошибка, которую вы получаете от этого

ORA-06550: line 9, column 135: PLS-00103: Encountered the symbol «end-of-file» .

указывает, что очевидно завершенный блок заканчивается раньше положенного срока. Терминатора оператора после точки с запятой нет blah , но также нет end loop или end для блока — в этом коде он пытается выполнить. По сути, он не видел остальной части сценария.

Затем он продолжает и пытается интерпретировать следующий фрагмент.

что также недействительно; клиент даже не пытается это выполнить, потому что не знает, что с этим делать.

Затем следующий кусок

успешно выполняется как простой оператор SQL (управление транзакциями), а не в контексте PL / SQL.

Короче говоря, вы не можете заменить точку с запятой на косую черту в блоке PL / SQL, поскольку они делают разные вещи. В простом SQL они взаимозаменяемы (или, скорее, для большинства клиентов они взаимозаменяемы; по крайней мере, по умолчанию — даже в SQL * Plus вы можете изменить терминатор SQL с точки с запятой на что-то другое).

Клиент по-прежнему обрабатывает косую черту после блока PL / SQL, и когда он видит, что он отправляет блок в базу данных для выполнения. Но хотя он знает, что находится внутри блока, он знает, что любые точки с запятой, которые он видит, являются частью языка PL / SQL, и не должен пытаться их интерпретировать.

Это упоминается в документации SQL * Plus для выполнения блоков PL / SQL , и другие клиенты, как правило, ведут себя аналогичным образом.

Execute the current subprogram with a RUN or slash ( / ) command. A semicolon ( ; ) is treated as part of the PL/SQL subprogram and will not execute the command.

Источник

никмейн

53 / 37 / 17

Регистрация: 24.10.2016

Сообщений: 960

1

08.01.2018, 20:54. Показов 1521. Ответов 5

Метки нет (Все метки)


Такой вопрос: я создал триггер, но этот триггер компилируется и выскакивает такая ошибка

Trigger SIGNER_ID_BIR compiled.

Error starting at line : 288 in command —
END
Error report —
Unknown Command

Что делать?

Вот код:

Oracle 11 SQL
1
2
3
4
CREATE TRIGGER SIGNER_ID_BIR BEFORE INSERT ON XMLD_SIGNERS FOR EACH ROW 
BEGIN 
:NEW.SIGNER_ID:=XMLD_SIGNERS_ID_SEQ.NEXTVAL;
END;

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



Grossmeister

Модератор

4192 / 3031 / 577

Регистрация: 21.01.2011

Сообщений: 13,109

09.01.2018, 10:35

2

Цитата
Сообщение от никмейн
Посмотреть сообщение

:NEW.SIGNER_ID:=XMLD_SIGNERS_ID_SEQ.NEXTVAL;

Не во всех версиях Oracle такое возможно (вроде только с Ora 12).
В предыдущих так:

SQL
1
2
3
SELECT XMLD_SIGNERS_ID_SEQ.NEXTVAL
INTO :NEW.SIGNER_ID
FROM dual;



0



53 / 37 / 17

Регистрация: 24.10.2016

Сообщений: 960

09.01.2018, 16:46

 [ТС]

3

Цитата
Сообщение от Grossmeister
Посмотреть сообщение

Не во всех версиях Oracle такое возможно (вроде только с Ora 12).

у меня Oracle XE



0



Модератор

4192 / 3031 / 577

Регистрация: 21.01.2011

Сообщений: 13,109

09.01.2018, 16:55

4

Цитата
Сообщение от никмейн
Посмотреть сообщение

Oracle XE

Есть версии Oracle 10 XE и Oracle 11 XE. Так что ни разу не 12.



0



53 / 37 / 17

Регистрация: 24.10.2016

Сообщений: 960

09.01.2018, 20:56

 [ТС]

5

Oracle 11 XE



0



Модератор

4192 / 3031 / 577

Регистрация: 21.01.2011

Сообщений: 13,109

10.01.2018, 09:50

6

Цитата
Сообщение от никмейн
Посмотреть сообщение

Oracle 11 XE

Ну так я уже показал текст в первом сообщении.

PS
Кстати, встречал на форумах сообщения, что Oracle сам все равно заменяет новый вариант на старый.



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

10.01.2018, 09:50

Помогаю со студенческими работами здесь

Ошибка в триггере
Для авто-мастерской необходимо разработать триггер, который при назначении механика заменяет его…

Ошибка в триггере
using UnityEngine;

public class CheckPlayer : MonoBehaviour {

public RoomManager p;

Ошибка в триггере
CREATE OR REPLACE TRIGGER TR
BEFORE INSERT ON BUS
FOR EACH ROW

DECLARE
avgAMT NUMBER :=…

Ошибка в триггере
Здравствуйте. Помогите пожалуйста не знаю в чем дело. Пытаюсь написать триггер с помощью SQL…

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

6

У меня есть следующий запрос, который я использую в Oracle 11g

IF EXISTS (SELECT * FROM EMPLOYEE_MASTER WHERE EMPID='ABCD32643') 
THEN 
update EMPLOYEE_MASTER set EMPID='A62352',EMPNAME='JOHN DOE',EMPTYPE='1' where EMPID='ABCD32643' ;
ELSE 
insert into EMPLOYEE_MASTER(EMPID,EMPNAME,EMPTYPE) values('A62352','JOHN DOE','1') ;
END IF;

Запустив оператор, я получаю следующий вывод:

Error starting at line : 4 in command -
ELSE 
Error report -
Unknown Command


1 row inserted.

Error starting at line : 6 in command -
END IF
Error report -
Unknown Command

Значения вставляются с ошибкой, когда я запускаю его напрямую. Но когда я пытаюсь выполнить этот запрос через свое приложение, я получаю исключение оракула из-за сгенерированной ошибки:

ORA-00900: invalid SQL statement

И, следовательно, значения не вставляются.

Я относительно новичок в Oracle. Посоветуйте, пожалуйста, что не так с приведенным выше запросом, чтобы я мог выполнить этот запрос без ошибок.

2 ответа

Лучший ответ

Если MERGE у вас не работает, попробуйте следующее:

begin
  update EMPLOYEE_MASTER set EMPID='A62352',EMPNAME='JOHN DOE',EMPTYPE='1' 
    where EMPID='ABCD32643' ;
  if SQL%ROWCOUNT=0 then
    insert into EMPLOYEE_MASTER(EMPID,EMPNAME,EMPTYPE)
      values('A62352','JOHN DOE','1') ;
  end if;
end;

Здесь вы update по спецификации, затем проверьте, нашли ли вы подходящую строку, и insert, если вы этого не сделали.


1

Erich Kitzmueller
29 Мар 2017 в 09:25

«что не так с вышеуказанным запросом»

Что не так с запросом, так это то, что это не запрос (SQL). Это должен быть фрагмент программы (PL / SQL), но он не записан как блок PL / SQL, обрамленный ключевыми словами BEGIN и END;.

Но превращение его в анонимный блок PL / SQL не поможет. Oracle PL / SQL не поддерживает синтаксис IF EXISTS (select ....

К счастью, Oracle SQL поддерживает оператор MERGE, который делает то же самое, что и ваш код, с меньшим набором текста.

merge into EMPLOYEE_MASTER em
using ( select 'A62352' as empid,
               'JOHN DOE' as empname,
               '1' as emptype
         from dual ) q
on (q.empid = em.empid)
when not matched then
    insert (EMPID,EMPNAME,EMPTYPE) 
           values (q.empid, q.empname, q.emptype)
when matched then
    update 
    set em.empname = q.empname, em.emptype = q.emptype
/

Кроме того, что вы также пытаетесь обновить empid. Это не поддерживается в MERGE. Почему вы хотите изменить первичный ключ?

«Нужен ли этот запрос для добавления значений во все столбцы таблицы?»

INSERT может иметь все столбцы в таблице. UPDATE не может изменить столбцы, используемые в предложении ON (обычно это первичный ключ), потому что это ограничение работы MERGE. Я думаю, что это тот же механизм сохранения ключей, который мы видим при обновлении представлений. Подробнее …,


0

APC
29 Мар 2017 в 09:22

Понравилась статья? Поделить с друзьями:
  • Error report ora 00904 недопустимый идентификатор 00904 00000 s invalid identifier
  • Error report killing floor 2 что делать
  • Error report dll скачать
  • Error report dll sony vegas
  • Error report call of duty 4 modern warfare