sql >> Databáze >  >> RDS >> Oracle

Jak vyřešit chybějící výraz ORA-00936

Popis

ORA-00936 :chybějící výraz je jednou z běžných chyb, kterým musel nějaký čas čelit každý, kdo pracuje v Oracle SQL. To se obvykle stává, když vynecháte důležitou věc v příkazu SQL, tj. vynecháte důležitou část toho, co jste se snažili spustit

Reference :Dokumentace Oracle

Příčina ORA-00936:chybějící výraz

Tato chyba Oracle souvisí hlavně s příkazy SQL SELECT. Jeden zřejmý důvod je, že chybí seznam vybraných sloupců nebo jsou výrazy ve vybraných sloupcích neúplné.

Chcete-li spustit kontrolní seznam, vyřešte chybu chybějícího výrazu ORA-00936

(1) Stává se to, když zapomenete uvést sloupec  v příkazu select

Select from mrp_details;

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

Správným způsobem by bylo vypsat sloupec, který chcete vybrat

Select col1,col2 from mrp_details; 

(2) Někdy děláme chybu při použití výrazu Distinct. Následující příkaz selže s 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

Mít dvě odlišné klauzule nedává smysl a dává chybu

Další příklad

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

odlišné lze použít pouze na začátku

Takže správné tvrzení by bylo

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

(3) Tato chyba je způsobena, když je část výrazu vynechána, některé příklady jsou

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

** Operátory fungují v PLSQL, ale ne v SQL, musíme pro to použít funkci Power, takže správný způsob by byl

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

(4) Další příklad

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

Zde zapomenete uvést název sloupce za operátorem zřetězení, správný SQL by byl

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

(5) Když přidáte další čárky do seznamu sloupce

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

Musíme tedy dvakrát zkontrolovat příkaz SQL, když narazíme na tuto chybu, a ujistit se, že děláme běžnou chybu

(6) Tato chyba se také objeví, pokud v příkazu SQL vynecháte From

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

Zde jsme vynechali zmínku o klauzuli from. Příkaz SELECT má tři části:to wit:“SELECT->FROM->WHERE
Můžete vynechat klauzuli where, ale select a from jsou nezbytné

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

(7) Může se také objevit v příkazu insert jako níže

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

Nepotřebujeme hodnoty jako v tomto prohlášení

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

(8) Někdy můžeme zaměnit uživatelem definované funkce a funkce Oracle, což může vést ke zmatené syntaxi, která by vedla k chybové zprávě. Vyvarujte se jim proto

(9) V Oracle jsou také některé chyby
(a) Chyba:4567818 základní chyba č.:4192148 – nezveřejněno na 9207
(b) Chyba:4212516 (nepublikováno) na oracle 10.1.0.4.0.
S těmito chybami dojde k chybě ORA-00936, když selže zobrazení SELECT ON. V zásadě je ORA-00936 vyvoláno, když je vytvořen pohled SQL z „vytvořit nebo nahradit pohled MY_VIEW jako select t.*,other_tab_col z tab t, other_tab“. Tím se vytvoří definice pohledu, která je nesprávná v DBA_VIEWS, takže vyvolá ORA- 00936 a možné výpisy jádra. Aby bylo možné opravit chyby a vyřešit ORA-00936, společnost MetaLink nabízí tato řešení pro příslušnou verzi:
Oprava pro 9.2.0.7:Patch 4192148 je k dispozici pro systémy Solaris (64bit) a AIX5L (64bitová verze). Oprava pro 10.1.0.4:
Oprava 4212516 je dostupná pro většinu platforem.

Stručně řečeno, ORA-00936 chybí výraz lze vyřešit pečlivou kontrolou příkazu SQL.

Související články
ORA-00911:neplatný znak
ORA-03113:konec souboru na komunikačním kanálu
ORA-00257
ORA-27154:vytvoření příspěvku/čekání se nezdařilo během spouštění
ORA-29913 s externími tabulkami
ora-20001 v Shromažďování statistik schématu na 11g (FND_HISTOGRAM_COLS)
Souběžný správce:cleanup_node se nezdařil kvůli ORA-01427

  1. oratop

  2. Použití Dapper s Oracle

  3. Přírůstkové statistiky SQL Server 2014

  4. Jak funguje funkce CHAR() na serveru SQL Server (T-SQL)