Oracle’s official “cause and action” that appears along with the error is:
Cause: A required part of a clause or expression has been omitted.
For example, a SELECT statement may have been entered without a list of columns or
expressions or with an incomplete expression.
This message is also issued in cases where a reserved word is misused, as in SELECT TABLE.
Action: Check the statement syntax and specify the missing component.
So, in summary, the query is missing some clause that it needs in order to run.
ORA-00936 Solution
To resolve the ORA-00936 error:
Check that your
column names are all listed correctly
in the SELECT clause
Ensure you have a
FROM clause in your SELECT statement
. Even if you aren’t selecting from a table, you still need FROM in Oracle SQL, so you could use the DUAL table (LINK)
Remove any
commas that shouldn’t be in your query
Missing Columns
The ORA-00936 error often occurs when you leave out the columns in the SELECT clause.
For example:
SELECT
FROM students;
ORA-00936: missing expression
This is because you need to list the column names after the word SELECT and before the word FROM.
This query should work:
SELECT student_id, first_name, last_name
FROM students;
Missing FROM
This error can also occur if you don’t have a FROM keyword in your SELECT statement.
For example, this query will display an error:
SELECT first_name, last_name
WHERE student_id = 5;
There is no FROM clause in this query, so you’ll get an error.
Correct the query to add the FROM clause, so it knows which table to query.
SELECT first_name, last_name
FROM students
WHERE student_id = 5;
Remove Commas
Sometimes you have all of the right keywords, but you’re still getting the ORA-00936: missing expression error.
For example this query gives an error:
SELECT first_name, last_name,
FROM students
WHERE student_id = 5;
The reason for this is because there is a comma after the final column “last_name”, and then there is the FROM keyword.
Commas should only be used when you want to specify another column or table, and not before a keyword like we have in this example.
To correct it, remove the comma.
SELECT first_name, last_name
FROM students
WHERE student_id = 5;
ORA-00936 in UPDATE Statement
If you’re getting an ORA-00936: missing expression in an
UPDATE statement
, then the same steps can be taken:
Check that you have all the keywords that are required (UPDATE, SET)
Check there are no extra commas where there shouldn’t be.
If you’re using a subquery inside the UPDATE statement, then ensure that subquery has all the right keywords and no extra commas as mentioned earlier
ORA-00936 in INSERT Statement
Just like the UPDATE statement, you can also get an ORA-00936: missing expression in an
INSERT statement
.
The same steps can be taken:
Check that you have all of the required keywords.
Check there are no extra commas
Check that the number of values and the number of columns are the same
If you’re using a subquery inside the INSERT statement, then ensure that subquery has all the right keywords and no extra commas as mentioned earlier
So, that’s how you resolve the ORA-00936 error in your SQL query. If you have any questions on this error, leave a comment below.
I see an issue with my Oracle queries, but I don’t know why:
1. This one works
SELECT contact_id as id, CONTACTS.* from CONTACTS WHERE ROWNUM <=1;
2. This one fails, with the error SQL Error: ORA-00936: missing expression
00936. 00000 – "missing expression"
SELECT contact_id as id, * from CONTACTS WHERE ROWNUM <=1;
I have a problem with the insert in the beggining of subquery of the values, i just ran the subquery and it works, please help me:
INSERT INTO DSA.TMP_DIM_CLIENTE (
MANDT,
SPRAS,
ORGANIZACION_VENTAS,
CANAL_DISTRIBUCION,
SECTOR,
CODIGO_CLI,
CODIGO,
GRUPO,
COD_CONDICION_PAGO,
DIAS_ZDMC,
NOMBRE2,
NOMBRE1,
CALLE1,
TELF1,
COD_PROVINCIA,
POBLACION,
DISTRITO,
COD_CANAL,
CANAL,
COD_SUBCANAL,
SUBCANAL,
COD_SEG,
SEGMENTO,
COD_TIPO_CLI,
TIPO_CLI,
COD_PALLET_ESTIBADORES,
PALLET_ESTIBADORES,
ASESOR,
AGENTE,
COD_ZONA_VENTA,
ZONA_VENTA,
INCO1,
INCO2,
CAPACIDAD,
PRODVENDIDO,
USO_FINAL,
CATEGORIA_CLI,
CATEGORIA_NEG,
EXPORTADOR,
DENSIDAD,
SUB_DIV_INEN,
ZONAS,
CC_ZONA,
SUBZONA,
CREADO_EL,
ETL_TSTAMP,
BLOQUEADO
) VALUES(
SELECT DISTINCT
NVL(dsa.limpiar_cadena(CLI.MANDT),’-‘) MANDT,
NVL(dsa.limpiar_cadena(CLI.SPRAS),’-‘) SPRAS,
NVL(dsa.limpiar_cadena(DCLI.VKORG),’-‘) Organizacion_ventas,
NVL(dsa.limpiar_cadena(dcli.vtweg),’-‘) canal_distribucion,
NVL(dsa.limpiar_cadena(dcli.spart),’-‘) sector,
dsa.limpiar_numero(CLI.KUNNR)CODIGO_CLI ,
NVL(dsa.limpiar_cadena(CLI.KUNNR),’-‘)CODIGO ,
NVL(dsa.limpiar_cadena(cli.STCD1),’POR DEFINIR’) ruc,
NVL(dsa.limpiar_cadena(CLI.KTOKD),’-‘) AS GRUPO,
DCLI.ZTERM,
TVZBT.vtext DIAS_ZDMC,
–pais.butxt,
NVL(dsa.limpiar_cadena(CLI.NAME2),NVL(dsa.limpiar_cadena(CLI.NAME1),’POR DEFINIR’)) NOMBRE2,
CASE NVL(dsa.limpiar_cadena(CLI.KTOKD),’-‘)
WHEN ‘ZTER’ THEN — SOLO DE DESTINATARIOS
CASE NVL(dsa.limpiar_cadena(CLI.NAME2),’-‘)
WHEN ‘-‘ THEN NVL(dsa.limpiar_cadena(CLI.NAME1),’POR DEFINIR’)
ELSE CASE NVL(dsa.limpiar_cadena(CLI.NAME1),’-‘)
WHEN ‘-‘ THEN NVL(dsa.limpiar_cadena(CLI.NAME2),’POR DEFINIR’)
ELSE CASE dsa.limpiar_cadena(CLI.NAME1) WHEN dsa.limpiar_cadena(CLI.NAME2) THEN dsa.limpiar_cadena(CLI.NAME1)
ELSE CONCAT(CONCAT(dsa.limpiar_cadena(CLI.NAME1),’ ‘),dsa.limpiar_cadena(CLI.NAME2)) END
NVL(dsa.limpiar_cadena(CLI.NAME1),’POR DEFINIR’)
END AS NOMBRE1, –28/10/2020 CAMPO ACTUALIZADO PARA OBTENER NOMBRE COMPLETO
–NVL(dsa.limpiar_cadena(CLI.NAME1),’POR DEFINIR’) NOMBRE1,
NVL(dsa.limpiar_cadena(CLI.STRAS ),’POR DEFINIR’)CALLE1,
telf1,
cli.regio as cod_provincia,
NVL(dsa.limpiar_cadena(CLI.MCOD3),’POR DEFINIR’) AS POBLACION,
NVL(dsa.limpiar_cadena(CLI.ORT02),NVL(dsa.limpiar_cadena(CLI.MCOD3),’POR DEFINIR’)) AS DISTRITO,
NVL(dsa.limpiar_cadena(DCLI.KDGRP),’POR DEFINIR’) AS COD_CANAL,
NVL(dsa.limpiar_cadena(d.ktext),’POR DEFINIR’) CANAL,
NVL(dsa.limpiar_cadena(DCLI.kvgr1),’POR DEFINIR’) AS COD_subcanal ,
NVL(dsa.limpiar_cadena(g1.bezei),’POR DEFINIR’) subcanal,
NVL(dsa.limpiar_cadena(DCLI.kvgr2),’POR DEFINIR’) AS cod_seg,
NVL(dsa.limpiar_cadena(g2.bezei),’POR DEFINIR’) segmento,
NVL(dsa.limpiar_cadena(DCLI.kvgr3),’POR DEFINIR’) AS COD_tipo_cli,
NVL(dsa.limpiar_cadena(g3.bezei ),’POR DEFINIR’) tipo_cli,
NVL(dsa.limpiar_cadena(DCLI.kvgr4),’POR DEFINIR’) AS COD_pallet_estibadores,
NVL(dsa.limpiar_cadena(g4.bezei),’POR DEFINIR’) pallet_estibadores,
NVL(dsa.limpiar_cadena(asesor.asesor),’POR DEFINIR’) asesor,
NVL(dsa.limpiar_cadena(agente.agente),’POR DEFINIR’) agente,
DCLI.BZIRK COD_ZONA_VENTA,
C.BZTXT ZONA_VENTA,
DCLI.INCO1,
DCLI.INCO2,
NVL(dsa.limpiar_cadena(Capacidad.Capacidad),’POR DEFINIR’) Capacidad,
NVL(dsa.limpiar_cadena(prodVendido.prodVendido),’POR DEFINIR’) prodVendido,
NVL(dsa.limpiar_cadena(usoFinal.usoFinal),’POR DEFINIR’) uso_final,
NVL(dsa.limpiar_cadena(catCli.catCli),’POR DEFINIR’) categoria_Cli,
NVL(dsa.limpiar_cadena(catNeg.catNeg),’POR DEFINIR’) categoria_Neg,
NVL(dsa.limpiar_cadena(exportador.exportador),’POR DEFINIR’) exportador,
NVL(dsa.limpiar_cadena(DENSIDAD.DENSIDAD),’POR DEFINIR’) DENSIDAD,
NVL(dsa.limpiar_cadena(subdivInen.subdivInen),’POR DEFINIR’) sub_div_Inen,
NVL(dsa.limpiar_cadena(ZONAS.ZONAS),’POR DEFINIR’) ZONAS,
NVL(dsa.limpiar_cadena(CCZONAS.CCZONA),’POR DEFINIR’) CC_ZONA,
NVL(dsa.limpiar_cadena(SUBZONAS.SUBZONA),’POR DEFINIR’) SUBZONA,
–,interl.kunnr as cod_padre,interl.parvw as cod_tipo_interloc
to_date(CLI.ERDAT, ‘yyyymmdd’) CREADO_EL,
SYSDATE ETL_TSTAMP,
WHEN NVL(dsa.limpiar_cadena(DCLI.AUFSD),’-‘) = ‘-‘ THEN ‘ACTIVO’
ELSE ‘INACTIVO’ END BLOQUEADO
FROM dsa.KNA1 CLI
INNER JOIN dsa.KNVV DCLI ON DCLI.KUNNR = CLI.KUNNR and cli.mandt = dcli.mandt
LEFT JOIN dsa.TVZBT TVZBT ON TVZBT.MANDT =DCLI.MANDT AND TVZBT.zterm=DCLI.zterm AND TVZBT.spras = cli.spras
LEFT JOIN dsa.T171T C ON C.MANDT =CLI.MANDT AND C.BZIRK =DCLI.BZIRK AND cli.spras = C.spras — ZONA CIO (ZONA DE VENTA)
LEFT JOIN dsa.T151T D ON D.KDGRP = DCLI.KDGRP AND D.MANDT = CLI.MANDT AND cli.spras = D.spras — CANAL
LEFT join dsa.TVV1t g1 on g1.kvgr1=DCLI.kvgr1 and g1.mandt = CLI.mandt and cli.spras = g1.spras — SUB CANAL
LEFT join dsa.TVV2t g2 on g2.kvgr2=DCLI.kvgr2 and g2.mandt = CLI.mandt and cli.spras = g2.spras — SEGMENTO
LEFT join dsa.TVV3t g3 on g3.kvgr3=DCLI.kvgr3 and g3.mandt = CLI.mandt and cli.spras = g3.spras — TIPO CLIENTE
LEFT join dsa.TVV4t g4 on g4.kvgr4=DCLI.kvgr4 and g4.mandt = CLI.mandt and cli.spras = g4.spras — PALLET_ESTIBADOR
LEFT JOIN dsa.T005U PROV ON cli.LAND1 = PROV.LAND1 AND cli.MANDT = PROV.MANDT AND prov.BLAND = cli.REGIO
–inner join dsa.KNVP interl on interl.kunn2= cli.kunnr and interl.mandt = CLI.mandt
LEFT JOIN (
SELECT cli.mandt, cli.kunnr, cli.cod_seg, cli.cod_opc, opc.descripcion as asesor FROM dsa.ZTBSD_CLIENTES CLI
INNER JOIN dsa.ZTBSD_OPCION_SEG OPC ON OPC.COD_SEG = CLI.COD_SEG AND OPC.COD_OPC = CLI.COD_OPC AND OPC.MANDT = CLI.MANDT
WHERE OPC.COD_SEG = ’02’ — ASESOR COMERCIAL
)asesor on asesor.mandt = DCLI.mandt and asesor.KUNNR = cli.KUNNR
LEFT JOIN (
SELECT cli.mandt, cli.kunnr, cli.cod_seg, cli.cod_opc, opc.descripcion as agente FROM dsa.ZTBSD_CLIENTES CLI
INNER JOIN dsa.ZTBSD_OPCION_SEG OPC ON OPC.COD_SEG = CLI.COD_SEG AND OPC.COD_OPC = CLI.COD_OPC AND OPC.MANDT = CLI.MANDT
WHERE OPC.COD_SEG = ’01’ — AGENTES DE SERVICIO
)agente on agente.mandt = CLI.mandt and agente.KUNNR = cli.KUNNR
LEFT JOIN (
SELECT cli.mandt, cli.kunnr, cli.cod_seg, cli.cod_opc, opc.descripcion as Capacidad FROM dsa.ZTBSD_CLIENTES CLI
INNER JOIN dsa.ZTBSD_OPCION_SEG OPC ON OPC.COD_SEG = CLI.COD_SEG AND OPC.COD_OPC = CLI.COD_OPC AND OPC.MANDT = CLI.MANDT
WHERE OPC.COD_SEG = ’03’ — CAPACIDAD BODEGA
)Capacidad on Capacidad.mandt = CLI.mandt and Capacidad.KUNNR = cli.KUNNR
LEFT JOIN (
SELECT cli.mandt, cli.kunnr, cli.cod_seg, cli.cod_opc, opc.descripcion as prodVendido FROM dsa.ZTBSD_CLIENTES CLI
INNER JOIN dsa.ZTBSD_OPCION_SEG OPC ON OPC.COD_SEG = CLI.COD_SEG AND OPC.COD_OPC = CLI.COD_OPC AND OPC.MANDT = CLI.MANDT
WHERE OPC.COD_SEG = ’04’ — PRODUCTO VENDIDO
)prodVendido on prodVendido.mandt = CLI.mandt and prodVendido.KUNNR = cli.KUNNR
LEFT JOIN (
SELECT cli.mandt, cli.kunnr, cli.cod_seg, cli.cod_opc, opc.descripcion as usoFinal FROM dsa.ZTBSD_CLIENTES CLI
INNER JOIN dsa.ZTBSD_OPCION_SEG OPC ON OPC.COD_SEG = CLI.COD_SEG AND OPC.COD_OPC = CLI.COD_OPC AND OPC.MANDT = CLI.MANDT
WHERE OPC.COD_SEG = ’05’ — USO FINAL CEMENTO
)usoFinal on usoFinal.mandt = CLI.mandt and usoFinal.KUNNR = cli.KUNNR
LEFT JOIN (
SELECT cli.mandt, cli.kunnr, cli.cod_seg, cli.cod_opc, opc.descripcion as catCli FROM dsa.ZTBSD_CLIENTES CLI
INNER JOIN dsa.ZTBSD_OPCION_SEG OPC ON OPC.COD_SEG = CLI.COD_SEG AND OPC.COD_OPC = CLI.COD_OPC AND OPC.MANDT = CLI.MANDT
WHERE OPC.COD_SEG = ’06’ — CATEGORIA CLIENTE
)catCli on catCli.mandt = CLI.mandt and catCli.KUNNR = cli.KUNNR
left JOIN (
SELECT cli.mandt, cli.kunnr, cli.cod_seg, cli.cod_opc, opc.descripcion as catNeg FROM dsa.ZTBSD_CLIENTES CLI
INNER JOIN dsa.ZTBSD_OPCION_SEG OPC ON OPC.COD_SEG = CLI.COD_SEG AND OPC.COD_OPC = CLI.COD_OPC AND OPC.MANDT = CLI.MANDT
WHERE OPC.COD_SEG = ’07’ — CATEGORIA DE NEGOCIO
)catNeg on catNeg.mandt = CLI.mandt and catNeg.KUNNR = cli.KUNNR
LEFT JOIN (
SELECT cli.mandt, cli.kunnr, cli.cod_seg, cli.cod_opc, opc.descripcion as exportador FROM dsa.ZTBSD_CLIENTES CLI
INNER JOIN dsa.ZTBSD_OPCION_SEG OPC ON OPC.COD_SEG = CLI.COD_SEG AND OPC.COD_OPC = CLI.COD_OPC AND OPC.MANDT = CLI.MANDT
WHERE OPC.COD_SEG = ’08’ — EXPORTADOR
)exportador on exportador.mandt = CLI.mandt and exportador.KUNNR = cli.KUNNR
LEFT JOIN (
SELECT cli.mandt, cli.kunnr, cli.cod_seg, cli.cod_opc, opc.descripcion as DENSIDAD FROM dsa.ZTBSD_CLIENTES CLI
INNER JOIN dsa.ZTBSD_OPCION_SEG OPC ON OPC.COD_SEG = CLI.COD_SEG AND OPC.COD_OPC = CLI.COD_OPC AND OPC.MANDT = CLI.MANDT
WHERE OPC.COD_SEG = ’09’ — DENSIDAD
)DENSIDAD on DENSIDAD.mandt = CLI.mandt and DENSIDAD.KUNNR = cli.KUNNR
LEFT JOIN (
SELECT cli.mandt, cli.kunnr, cli.cod_seg, cli.cod_opc, opc.descripcion as subdivInen FROM dsa.ZTBSD_CLIENTES CLI
INNER JOIN dsa.ZTBSD_OPCION_SEG OPC ON OPC.COD_SEG = CLI.COD_SEG AND OPC.COD_OPC = CLI.COD_OPC AND OPC.MANDT = CLI.MANDT
WHERE OPC.COD_SEG = ’10’ — SUBDIVISIÓN INEN
)subdivInen on subdivInen.mandt = CLI.mandt and subdivInen.KUNNR = cli.KUNNR
LEFT JOIN (
SELECT cli.mandt, cli.kunnr, cli.cod_seg, cli.cod_opc, opc.descripcion as ZONAS FROM dsa.ZTBSD_CLIENTES CLI
INNER JOIN dsa.ZTBSD_OPCION_SEG OPC ON OPC.COD_SEG = CLI.COD_SEG AND OPC.COD_OPC = CLI.COD_OPC AND OPC.MANDT = CLI.MANDT
WHERE OPC.COD_SEG = ’11’ — ZONAS
)ZONAS on ZONAS.mandt = CLI.mandt and ZONAS.KUNNR = cli.KUNNR
LEFT JOIN (
SELECT cli.mandt, cli.kunnr, cli.cod_seg, cli.cod_opc, opc.descripcion as CCZONA FROM dsa.ZTBSD_CLIENTES CLI
INNER JOIN dsa.ZTBSD_OPCION_SEG OPC ON OPC.COD_SEG = CLI.COD_SEG AND OPC.COD_OPC = CLI.COD_OPC AND OPC.MANDT = CLI.MANDT
WHERE OPC.COD_SEG = ’27’ — CC ZONAS
)CCZONAS on CCZONAS.mandt = CLI.mandt and CCZONAS.KUNNR = cli.KUNNR
LEFT JOIN (
SELECT cli.mandt, cli.kunnr, cli.cod_seg, cli.cod_opc, opc.descripcion as SUBZONA FROM dsa.ZTBSD_CLIENTES CLI
INNER JOIN dsa.ZTBSD_OPCION_SEG OPC ON OPC.COD_SEG = CLI.COD_SEG AND OPC.COD_OPC = CLI.COD_OPC AND OPC.MANDT = CLI.MANDT
WHERE OPC.COD_SEG = ’28’ — SUBZONAS
)SUBZONAS on SUBZONAS.mandt = CLI.mandt and SUBZONAS.KUNNR = cli.KUNNR
–INNER JOIN dsa.T001 pais ON pais.bukrs = DCLI.vkorg and pais.MANDT =CLI.MANDT
WHERE CLI.LAND1= ‘EC’ and CLI.spras = ‘S’);