2015-12-16 5 views
-7

В oracle 11g, я хочу выполнить такой запрос:Выберите из цикла в Oracle

В этом случае я не разрешил использовать функцию или процедуру. Я пытался Google, но я не мог найти хорошее решение. Практически покажите мне способ использования функции или процедуры хранения.

Таблица Х с колоннами (А, В, С) С строки в таблице X я хочу, чтобы выбрать:

Count = B - A; 
    for(i=0;i<Count;i++) 
    { 
     C++; 
     D = C * A; 
    } 

Ожидать результат: таблица Y с колоннами (A, B, C, D)

+0

За сколько таблиц вы хотите зациклиться? Возможно, вы сможете просто использовать запрос. –

+1

Что такое GG аббревиатура? Циклы являются процедурной конструкцией. Если вы действительно хотите использовать циклы, вам нужен какой-то PL/SQL. Но вы исключаете PL/SQL, когда говорите, что вам не нужна процедура или функция. –

+0

Я думаю, что GG = Google – fuzzy28

ответ

1

Вы думаете, как разработчик 3GL. Java (или что-то еще) имеет только массивы, поэтому все является итерацией. Но SQL - это ориентированный на набор язык: нам не нужны циклы для работы с наборами данных. Oracle SQL имеет встроенные функции агрегации, которые позволяют нам вычислять значения из наборов записей.

Например, этот запрос вычисляет общий размер вознаграждения (оклад плюс комиссионные), количество работников и средней заработной платы:

select sum(sal + nvl(comm,0)) as total_renum 
     , count(*) as total_emps 
     , avg(sal) as average_salary 
from emp 
/

Oracle имеет широкий спектр таких функций, некоторые из них являются действительно мощным. Find out more. Обязательно проверьте также analytic functions.

Хммм, поэтому впоследствии вы опубликовали скрытый фрагмент кода. Это до сих пор не совсем ясно, что вы хотите, но это может произвести результат для вкладки; е Y:

select a 
     , b 
     , c 
     , 0 + ((c+level) * a) as d 
from x 
connect by level <= (b-a) 
/

Для каждой строки в таблице X она будет генерировать (b-a) строки, с производным значением d. Я предположил начало 0 для d.

Смежные вопросы