Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да разрешите липсващия израз ORA-00936

Описание

ORA-00936 :липсващ израз е една от често срещаните грешки, които всеки работещ в Oracle SQL трябва да е срещал известно време. Това обикновено се случва, когато пропуснете важно нещо в оператора Sql, т.е. пропуснете важна част от това, което се опитвате да изпълните

Справка :Документация на Oracle

Причина за ORA-00936 :липсващ израз

Тази грешка на Oracle е свързана основно с операторите на SQL SELECT. Една очевидна причина е, че списъкът с избрани колони липсва или изразите в избраните колони са непълни.

Проверете списъка за изпълнение, за да разрешите грешката при липсващ израз ORA-00936

(1) Това се случва, когато забравите да посочите колоната  в оператора за избор

Select from mrp_details;

select from mrp_details;
ERROR at line 1:
ORA-00936: missing expression

Правилният начин би бил изброяване на колоната, която искате да изберете

Select col1,col2 from mrp_details; 

(2) Понякога правим грешка в използването на израза Distinct. Следното изявление ще се провали с ORA-00936

select distinct a, b,c,d, distinct e from tab_example
where b=’ABCD’ and c =1 and d= ‘JOHN’
ERROR at line 1:
ORA-00936: missing expression

Наличието на две отделни клаузи няма смисъл и дава грешка

Друг пример

select a, b,c,d, distinct e from tab_example
where b=’ABCD’ and c =1 and d= ‘JOHN’
ERROR at line 1: ORA-00936: missing expression

different може да се използва само в началото

Така че правилното твърдение би било

select distinct a, b,c,d, e from tab_example
where b=’ABCD’ and c =1 and d= ‘JOHN’

(3) Тази грешка се причинява, когато част от израза е пропусната, някои примери са

select 2**8 from dual; 
select 2**8 from dual;
ERROR at line 1: ORA-00936: missing expression

** операторите работят в PLSQL, но не и в SQL, трябва да използваме функцията Power за тях, така че правилният начин би бил

select power(2,3) from dual;
POWER(2,3)
--------
8

(4) Друг пример

select dept_name||' '|| from dept;
select dept_name||' '|| from dept
ERROR at line 1: ORA-00936: missing expression

Тук забравяте да споменете името на колоната след оператора за конкатенация, правилният SQL би бил

select dept_name||' '||dept_no from dept;

(5) Когато добавите допълнителни запетаи в списъка с колона

select dept_no, dept_name, ,dept_location from dept_table;
select dept_no, dept_name, ,dept_location from dept_table;
ERROR at line 1: ORA-00936: missing expression

Така че трябва да проверим отново SQL оператора, когато ударим тази грешка, и да се уверим, че правим често срещаната грешка

(6) Тази грешка ще се появи и ако пропуснете From в SQL израза

select dept_no, dept_name, ,dept_location where dept_name like ‘A%’;
select dept_no, dept_name, ,dept_location where dept_name like ‘A%’;
ERROR at line 1: ORA-00936: missing expression

Тук пропуснахме да споменем клаузата from. Изразът SELECT има три части:„SELECT->FROM->WHERE
Можете да пропуснете клаузата where, но select и from са необходими

select dept_no, dept_name, ,dept_location from dept_table where dept_name like ‘A%’;

(7) Може да се появи и в израза за вмъкване, както е по-долу

insert into table1 (col1,col2) values as select col1,col2 from table2;
ERROR at line 1: ORA-00936: missing expression

Не се нуждаем от стойности, както в това изявление

insert into table1 (col1,col2) select col1,col2 from table2;

(8) Понякога можем да  сбъркаме дефинирани от потребителя функции и функции на Oracle и това може да доведе до объркан синтаксис, който би довел до съобщение за грешка. Така че избягвайте ги

(9) Има и някои грешки в Oracle
(a) Грешка:4567818 базова грешка №:4192148 – непубликувана на 9207
(b) Грешка:4212516 (непубликувана) на oracle 10.1.0.4.0.
С тези грешки се извежда грешка ORA-00936, когато изгледът SELECT ON не успее. По принцип ORA-00936 се хвърля, когато SQL изглед се създава от „създаване или замяна на изглед MY_VIEW като изберете t.*,other_tab_col от раздел t, other_tab“. Това създава дефиниция на изглед, която е неправилна в DBA_VIEWS, като по този начин хвърля ORA- 00936 и възможни изхвърляния на ядрото. За да поправите грешките и да разрешите ORA-00936, MetaLink предлага тези решения за съответната версия:
Поправка за 9.2.0.7:Пач 4192148 е наличен за системи, базирани на Solaris (64 бита) и AIX5L (64-битова). Поправка за 10.1.0.4 :
Пач 4212516 е налице за повечето платформи.

Накратко, ORA-00936 липсва израз може да бъде разрешен чрез внимателно проверка на вашия SQL израз.

Сродни статии
ORA-00911:невалиден знак
ORA-03113:край на файла на комуникационен канал
ORA-00257
ORA-27154:неуспешно публикуване/изчакване на създаването по време на стартиране
ORA-29913 с външни таблици
ora-20001 в Събиране на статистически данни за схемата на 11g(FND_HISTOGRAM_COLS)
Едновременен мениджър:cleanup_node неуспешно поради ORA-01427

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQLDeveloper поддържа ли изпълнение на скриптове?

  2. Как да променя схемата по подразбиране в sql developer?

  3. Правилният начин за предоставяне на достъп на потребителите до допълнителни схеми в Oracle

  4. Unitils и DBMaintainer - как да ги накарам да работят с множество потребители/схеми?

  5. Ключова дума „CONTINUE“ в Oracle 10g PL/SQL