почему так гадит PLSQL ?

egaron
Дата: 01.03.2007 16:41:16
который раз натыкаюсь на маразматические грабли Оракла - непонятно зачем придуманная несовместимость SQL и PLSQL

Весело. Отлаживаешь значит запрос в SQL

select 
  grouping(name)||grouping(code_im) grp,
  row_number()  over( partition by name, birth_date, isn_k_d, ser, num, dep, date_get order by grouping(code_im))  pn,
  name, birth_date, isn_k_d, ser, num, dep, date_get, o.code_im ,count(*) quantity

......

и далее, замечательный такой получается запрос.

Отладил - вставляешь в ХП - и облом ! не компилится !

чем провинился несчастный PLSQL что не поддерживается в нем row_number() over( partition by ?

Какую логику преследовали разработчики, создавая этот идиотизм ?

* у меня оракл 8.1.7 если что, может на ваших девятках-десятках такие ХП и компилятся *
Elic
Дата: 01.03.2007 16:48:36
egaron
чем провинился несчастный PLSQL что не поддерживается в нем row_number() over( partition by ?
Ничем. Просто до 9i он имел собственный отстающий от SQL движок.

egaron
Какую логику преследовали разработчики, создавая этот идиотизм ?
Иногда заглядывай в зеркало


P.S. Будь проще, тогда не придётся так волноваться
egaron
Дата: 01.03.2007 16:53:59
автор
P.S. Будь проще, тогда не придётся так волноваться


проще ? значит без страха за то что будешь послан всемогушим пэЭлем, можно написать только

select * from emp ?
Бабичев Сергей
Дата: 01.03.2007 16:55:27
egaron
и далее, замечательный такой получается запрос.

Отладил - вставляешь в ХП - и облом ! не компилится !
А создавать представления (VIEW) или делать динамические запросы тебя в школе не учили?
Elic
Дата: 01.03.2007 16:58:52
egaron
Elic
P.S. Будь проще, тогда не придётся так волноваться
проще ? значит без страха за то что будешь послан всемогушим пэЭлем, можно написать только
Негибким перед окружающей действительностью суждено оказаться надломленными ею
mcureenab
Дата: 01.03.2007 17:01:23
Никакого злого умысла разработчики PL/SQL не имеют. Видимо SQL и PL/SQL делают разные команды и команда PL/SQL не поспевает за всеми нововведениями в синтаксисе SQL.

Обрати внимание на главу PL/SQL Language Elements в Oracle Database PL/SQL User's Guide and Reference. Там описан синтаксис встаиваемых SQL запросов и прочих команд. Скажем прямо, он несколько отличается от синтаксиса динамических SQL запросов, который описан в SQL Reference. При написании встраиваемых SQL запросов нужно руководствоваться синтаксисом PL/SQL.

Запихни свой запрос в предстваление БД, чтобы в пакете остался только простой SQL запрос из этого представления, или используй динамический SQL. В последних выпусках Оракл твой запрос скорее всего можно статически встроить в PL/SQL. Если ты кинешь в форум небольшой пример, многие с удовольствием проверят его на своих БД.
Elic
Дата: 01.03.2007 17:09:39
mcureenab
Видимо SQL и PL/SQL делают разные команды и команда PL/SQL не поспевает за всеми нововведениями в синтаксисе SQL.
Не пристало тебе так неуверенно и в настоящем времени говорить об избитой теме.
mcureenab
Дата: 01.03.2007 17:37:33
Elic
mcureenab
Видимо SQL и PL/SQL делают разные команды и команда PL/SQL не поспевает за всеми нововведениями в синтаксисе SQL.
Не пристало тебе так неуверенно и в настоящем времени говорить об избитой теме.


Тема хоть и избитая, но откуда мне знать, кто и как делает Оракл? Кроме того на счёт движка PL/SQL у меня есть сомнения. Например Pro*C/C++ тоже использует собственный синтаксис встроенных SQL запросов, но никакого PL/SQL движка у него нет, это просто препроцессор. Аналогичная ситуация с утилитой wrap. Наконец, все SQL запросы выполняет SQL машина СУБД Оракл.
Лучше говорить о разных трансляторах или толкателях динамических и встроенных SQL запросов, о том, что в SQL Reference, PL/SQL Users Guide and Reference, Pro*C/C++ и т.д. описаны разные диалекты языка запросов, даже в SQL*Plus есть некоторые заморочки, типа ; в конце оператора SQL. И о том что глупо отлаживать код C++ в IDE Visual Basic.
givanov
Дата: 01.03.2007 21:00:29
mcureenab
даже в SQL*Plus есть некоторые заморочки, типа ; в конце оператора SQL.
То есть Вы так и не поняли?
mcureenab
Дата: 01.03.2007 21:30:05
givanov
mcureenab
даже в SQL*Plus есть некоторые заморочки, типа ; в конце оператора SQL.
То есть Вы так и не поняли?


А что я должен понять?