ESC را فشار دهید تا بسته شود

زمیوس آموزش، یادگیری و سرگرمی

خطای ORA‑۰۰۹۳۶: Missing Expression در Oracle

اگر با Oracle Database کار کرده باشی، تقریباً محاله حداقل یک‌بار با خطای زیر روبه‌رو نشده باشی:

				
					ORA-00936: missing expression
				
			

خطایی که معمولاً وسط کار، آن هم دقیقاً زمانی که فکر می‌کنی کوئری‌ات بی‌نقص است، ظاهر می‌شود!

در این مقاله آموزش Oracle در بخش خطای های اوراکلی، این خطا را کاملاً ریشه‌ای، با مثال‌های واقعی و کاربردی بررسی می‌کنیم؛ طوری که بعد از خواندنش، نه‌تنها دلیل خطا را بفهمی، بلکه دیگر به‌راحتی اسیرش نشوی.

هر کسی که با Oracle Database کار کرده باشد، دیر یا زود با خطایی روبه‌رو می‌شود که ظاهرش ساده است، اما پشتش کلی دردسر خوابیده:
				
					ORA‑۰۱۴۰۰: cannot insert NULL into ("SCHEMA"."TABLE"."COLUMN")
				
			

این خطا معمولاً دقیقاً زمانی ظاهر می‌شود که فکر می‌کنی Query کاملاً منطقی است. ستون را خودت دیده‌ای، اسمش درست است، جدول وجود دارد… اما اوراکل نظر دیگری دارد.

پیشنهاد می کنم این مقاله زیر رو حتما مطالعه کنی.

در این مقاله شما می خوانید

خطای ORA‑۰۰۹۳۶: Missing Expression یعنی:

«اوراکل انتظار یک Expression معتبر دارد، اما چیزی پیدا نمی‌کند.»

Expression چیست؟

در Oracle، Expression می‌تواند یکی از این‌ها باشد:

  • نام ستون
  • مقدار ثابت (عدد، رشته، تاریخ)
  • تابع (NVL، TO_DATE، SUM و …)
  • شرط (Condition)
  • Subquery
  • یا ترکیبی از موارد بالا

به زبان ساده‌تر:

📌 جایی از کوئری، چیزی جا افتاده یا ناقص نوشته شده است.

چون:

  • Oracle به سینتکس خیلی حساس است
  • بعضی خطاها با یک کامای اضافه یا یک شرط ناقص رخ می‌دهند
  • در کوئری‌های UPDATE، JOIN و CASE WHEN خیلی زود اتفاق می‌افتد

WHERE بدون شرط

غلط

				
					SELECT * FROM employees
WHERE;
				
			

درست

				
					SELECT * FROM employees
WHERE department_id = 10;
				
			

📌 بعد از WHERE حتماً باید شرط بیاید.

AND / OR ناقص

غلط

				
					SELECT * FROM employees
WHERE department_id = 10 AND;

				
			

درست

				
					SELECT * FROM employees
WHERE department_id = 10
  AND salary > ۵۰۰۰;

				
			

📌 AND یا OR بدون شرط بعدش = Missing Expression

کامای اضافی در SELECT

غلط

				
					SELECT employee_id, , salary
FROM employees;

				
			

درست

				
					SELECT employee_id, salary
FROM employees;

				
			

📌 یک کامای اضافی، کل کوئری را می‌ترکاند!

IN با پرانتز خالی

غلط

				
					SELECT * FROM employees
WHERE department_id IN ();

				
			

درست

				
					SELECT * FROM employees
WHERE department_id IN (10, 20, 30);

				
			

یا:

				
					WHERE department_id IN (
    SELECT department_id FROM departments
);

				
			

UPDATE با SET ناقص

غلط

				
					UPDATE employees
SET salary =
WHERE employee_id = 100;

				
			

درست

				
					UPDATE employees
SET salary = 8000
WHERE employee_id = 100;

				
			

📌 بعد از = باید مقدار یا Expression باشد.

CASE WHEN ناقص

غلط

				
					UPDATE employees
SET salary = CASE
    WHEN department_id = 10 THEN
    WHEN department_id = 20 THEN salary * 1.1
END;

				
			

درست

				
					UPDATE employees
SET salary = CASE
    WHEN department_id = 10 THEN salary * 1.2
    WHEN department_id = 20 THEN salary * 1.1
    ELSE salary
END;

				
			

📌 هر THEN باید خروجی داشته باشد.

استفاده ناقص از توابع Oracle

غلط

				
					SELECT NVL(salary)
FROM employees;

				
			

درست

				
					SELECT NVL(salary, 0)
FROM employees;

				
			

ORDER BY ناقص

غلط

				
					SELECT * FROM employees
ORDER BY;

				
			

درست

				
					SELECT * FROM employees
ORDER BY salary DESC;

				
			

خطا در JOIN

غلط

				
					SELECT e.employee_id, d.department_name
FROM employees e
JOIN departments d
ON e.department_id = ;

				
			

درست

				
					SELECT e.employee_id, d.department_name
FROM employees e
JOIN departments d
ON e.department_id = d.department_id;

				
			

✅ چک‌لیست طلایی

قبل از اجرا این موارد را سریع چک کن:

  • [ ] بعد از WHERE شرط هست؟
  • [ ] AND / OR تنها نیست؟
  • [ ] بعد از = مقدار داریم؟
  • [ ] IN خالی نیست؟
  • [ ] CASE WHEN کامل است؟
  • [ ] کامای اضافه نداریم؟
  • [ ] پرانتزها درست بسته شده‌اند؟

سوالات متداول درباره رفع خطای ORA‑۰۰۹۳۶ در اوراکل

خطای ORA‑۰۰۹۳۶ یعنی Oracle انتظار یک Expression معتبر دارد، اما به‌دلیل ناقص بودن کوئری، چیزی دریافت نمی‌کند.

این خطا معمولاً وقتی رخ می‌دهد که:

  • بعد از WHERE شرطی نوشته نشده
  • AND یا OR بدون شرط استفاده شده
  • SET در UPDATE مقدار ندارد
  • CASE WHEN ناقص نوشته شده
  • یا IN () خالی است

📌 به زبان ساده: یک تکه از کوئری جا افتاده است.

  • ORA‑۰۰۹۳۶Expression وجود ندارد
  • ORA‑۰۰۹۳۳ → ساختار کلی SQL اشتباه است

کوئری را خط‌به‌خط اجرا کن و بخش WHERE و SET را بررسی کن.

❌ نه، کاملاً Syntax Error است.

جمع‌بندی

خطای ORA‑۰۰۹۳۶ تقریباً همیشه یعنی:

«یک تکه از کوئری‌ات ناقص است»

با کمی دقت روی:

  • WHERE
  • AND / OR
  • SET
  • CASE WHEN
  • IN

می‌توانی ۹۰٪ مواقع آن را در چند ثانیه حل کنی.

📥 اگر سوالی داری در مورد رفع خطای ORA‑۰۰۹۳۶ در اوراکل داری، در بخش کامنت‌ها بپرس.

سؤالی درباره این مقاله داری؟

اگر نکته‌ای در این مقاله برات مبهم بود یا خواستی بیشتر بدونی، همین حالا برام بنویس تا دقیق و صمیمی پاسخت رو بدم — مثل یه گفت‌وگوی واقعی 💬

برو به صفحه پرسش و پاسخ

میثم راد

من یه برنامه نویسم که حسابی با دیتابیس اوراکل رفیقم! از اونایی ام که تا چیزی رو کامل نفهمم،ول کن نیستم، یادگرفتن برام مثل بازیه، و نوشتن اینجا کمک می کنه تا چیزایی که یاد گرفتم رو با بقیه به شریک بشم، با هم پیشرفت کنیم.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *