Как в Оракле сложить результат запроса и переменную?

Новичок Оркле
Дата: 29.07.2005 14:21:21
Кому это может показаться простым но у меня не работает такой запрос

declare MaxCode number;
begin
select Max(code) into MaxCode from Tabl1;
select Tabl2.code + MaxCode, lower(SYS_GUID()), Tabl2.name , NULL from Tabl2;
end;

Пишет что не хватает INTO в запросе..... :(
Leonid Kudryavtsev
Дата: 29.07.2005 14:27:14
IMHO
1. У тебя не запрос, а кусок PL/SQL программы (анонимный блок).
2. Одним запросом, можно попытаться сделать через под-запросы. Вариантов уйма. Как будет быстрее работать - не знаю. Как-то так:

select Tabl2.code +
(select Max(code) from Tabl1) -- MaxCode
, lower(SYS_GUID()), Tabl2.name , NULL from Tabl2;

или как-то так:

SELECT Tabl2.code + TmpTabl.MaxCode, lower(SYS_GUID()), Tabl2.name , NULL
FROM Tabl2, (select Max(code) as MaxCode from Tabl1) TmpTabl;
Bely
Дата: 29.07.2005 14:32:22
Новичок Оркле
Кому это может показаться простым но у меня не работает такой запрос

declare MaxCode number;
begin
select Max(code) into MaxCode from Tabl1; 
select Tabl2.code + MaxCode, lower(SYS_GUID()), Tabl2.name , NULL from Tabl2;
end;

Пишет что не хватает INTO в запросе..... :(

Сложить-то он может, и складывает - но куда запульнут результат этого SELECT-а он не знает.

PS: Вы, наверное, с MS-SQL-я сюда пришли... :)
Новичок Оракле
Дата: 29.07.2005 14:33:37
Так я уже пробовал, оба варианта не работают

Таже самая ошибка
13:30:09 PL/SQL: ORA-01744: inappropriate INTO
Bely
Дата: 29.07.2005 14:37:18
Новичок Оракле
Так я уже пробовал, оба варианта не работают

Таже самая ошибка
13:30:09 PL/SQL: ORA-01744: inappropriate INTO


То что написано у Вас - это БЛОК операторов.
Он ничего не может вернуть.
Возвращает значения только SELECT и записывает их:
1) В переменную и пр.
2) Возвращает клиенту

Попробуй как написали, но не обрамляй в BEGIN ... END;
Новичок Оракле
Дата: 29.07.2005 14:38:27
Bely
PS: Вы, наверное, с MS-SQL-я сюда пришли... :)

Верно, но что мне делать?

Вообще- нужно это в таблицу Tabl1 затулить, но тогда ругается PK_Code этой таблицы, говоря о том, что сложения не происходит.

declare MaxCode number;
begin
select Max(code) into MaxCode from Tabl1;
insert into Tabl1
select Tabl2.code + MaxCode, lower(SYS_GUID()), Tabl2.name , NULL from Tabl2;
end;
alex-ls
Дата: 29.07.2005 14:43:46
Новичок Оракле
Bely
PS: Вы, наверное, с MS-SQL-я сюда пришли... :)

Верно, но что мне делать?

Идти обратно или для начала почитать доку по оракл! Вам уже отвечали в чем ошибка.
Bely
Дата: 29.07.2005 14:47:10
Новичок Оракле
Bely
PS: Вы, наверное, с MS-SQL-я сюда пришли... :)

Верно, но что мне делать?

Вообще- нужно это в таблицу Tabl1 затулить, но тогда ругается PK_Code этой таблицы, говоря о том, что сложения не происходит.

declare MaxCode number;
begin
select Max(code) into MaxCode from Tabl1;
insert into Tabl1
select Tabl2.code + MaxCode, lower(SYS_GUID()), Tabl2.name , NULL from Tabl2;
end;
Здесь все правильно, хотя не самое лучшее решение...

Как ругается?
Что именно возвращает
select Tabl2.code , lower(SYS_GUID()), Tabl2.name , NULL from Tabl2
Tabl2.code - бывает отрицательным?
Или может хочет явного приведения типов?

Надо более излагать...
Новичок Оракле
Дата: 29.07.2005 14:50:29
Спасибо за помощь

Ошибка в том, что в Tabl2 данные не уникальные, чего то не доглядели, такого в принципе не должно было быть.
Perverts, damn it!
Дата: 29.07.2005 16:04:06
Сидит извращенец на извращенце и извращенцем погоняет.