Добрый вечер! Помогите, пожалуйста, с insert!

blauVerta
Дата: 02.11.2008 16:40:33
У меня проблема: SELECT работает, a insert говорит, что вставляется null, который не может быть вставлен:
INSERT INTO computation (d_computation, n_tariff, n_info_hot, n_info_cold, n_pay, n_sum_hot, n_sum_cold, n_client, n_total, n_debt, n_difference_hot, n_difference_cold)
SELECT distinct c.d_computation,
(SELECT tr.n_tariff
FROM tariff tr
WHERE tr.d_tariff = (SELECT d_tariff
FROM (SELECT d_tariff
FROM tariff, computation c
WHERE d_tariff <= c.d_computation
GROUP BY d_tariff
ORDER BY d_tariff desc)
WHERE ROWNUM = 1)) As n_tariff,
ROUND(AVG(c.n_info_hot)) As n_info_hot,
ROUND(AVG(c.n_info_cold)) As n_info_cold,
ROUND(AVG(c.n_pay)) As n_pay,
hot.n_sum_hot,
cold.n_sum_cold,
(SELECT n_client
FROM client
WHERE c_first_name like 'Ирина'
AND c_second_name like 'Сергеев%'
AND c_last_name like 'Малахова') As n_client,
(SELECT ROUND(AVG(hot.n_sum_hot + cold.n_sum_cold + n_debt))
FROM computation) As n_total,
ROUND(AVG(c.n_debt)) As n_debt,
ROUND(AVG(c.n_difference_hot)) As n_difference_hot,
ROUND(AVG(c.n_difference_cold)) As n_difference_cold
FROM computation c,
(SELECT ROUND(AVG(com.n_difference_hot*ta.n_tariff_hot)) As n_sum_hot
FROM computation com, (SELECT *
FROM tariff
WHERE d_tariff = (SELECT d_tariff
FROM (SELECT d_tariff
FROM tariff, computation c
WHERE d_tariff <= c.d_computation
GROUP BY d_tariff
ORDER BY d_tariff desc)
WHERE ROWNUM = 1)) ta
WHERE com.n_tariff = ta.n_tariff) hot,
(SELECT ROUND(AVG(com.n_difference_cold*ta.n_tariff_cold)) As n_sum_cold
FROM computation com, (SELECT *
FROM tariff t
WHERE d_tariff = (SELECT d_tariff
FROM (SELECT d_tariff
FROM tariff, computation c
WHERE d_tariff <= c.d_computation
GROUP BY d_tariff
ORDER BY d_tariff desc)
WHERE ROWNUM = 1)) ta
WHERE com.n_tariff = ta.n_tariff) cold
GROUP BY c.d_computation, n_tariff, hot.n_sum_hot, cold.n_sum_cold
ORDER BY c.d_computation
пишет: ORA-01400: cannot insert NULL into ("MP301_6"."COMPUTATION"."N_CLIENT")
old 2
Дата: 02.11.2008 17:08:44
SELECT n_client
FROM client
WHERE c_first_name like 'Ирина'
AND c_second_name like 'Сергеев%'
AND c_last_name like 'Малахова'
этот запрос выбирает нулл
blauVerta
Дата: 02.11.2008 19:05:28
old 2, когда выполняется SELECT без insert, то возвращается таблица, где в столбце n_client вписывается значение 301 -> по идее должен и при выполнении с insert возвращать 9 раз 301...
sql+
Дата: 02.11.2008 19:10:11
blauVerta
old 2, когда выполняется SELECT без insert, то возвращается таблица, где в столбце n_client вписывается значение 301 -> по идее должен и при выполнении с insert возвращать 9 раз 301...

Хм.и где в селекте 301 ?
Oracle честно пишет -вставляешь null туда, куда низя

desc computation 
- в студию
blauVerta
Дата: 02.11.2008 19:16:16
old 2
SELECT n_client
FROM client
WHERE c_first_name like 'Ирина'
AND c_second_name like 'Сергеев%'
AND c_last_name like 'Малахова'
этот запрос выбирает нулл

если отдельно выполнить этот запрос, вернется 301, это значение и должно быть не null
blauVerta
Дата: 02.11.2008 19:17:39
sql+


desc computation 
- в студию


это Вы про что?
blauVerta
Дата: 02.11.2008 19:25:58
может, искусственно прописать 301?...
но это же ведь не правильно...
blauVerta
Дата: 02.11.2008 19:40:03
вот такая штука:

SELECT nvl
((SELECT n_client
FROM client
WHERE c_first_name like 'Ирина'
AND c_second_name like 'Сергеев%'
AND c_last_name like 'Малахова'), 0)
FROM dual

как ни странно тоже возвращает 301, а не ноль...
blauVerta
Дата: 02.11.2008 19:43:01
значит то, что называется null-ом ораклом, - точно НЕ NULL!
SY
Дата: 02.11.2008 22:54:20
old 2
SELECT n_client
FROM client
WHERE c_first_name like 'Ирина'
AND c_second_name like 'Сергеев%'
AND c_last_name like 'Малахова'
этот запрос выбирает нулл


And why is that? It returns all rows where first name is exactly Ирина, last name exactly Малахова and отчество that starts with Сергеев:


SQL> select 1 from dual where 'A' like 'A';

         1
----------
         1

SY.