Можно использовать подзапрос для этого как
select *
from
( select *
from emp
order by sal desc )
where ROWNUM <= 5;
, Имеют также взгляд на тему На ROWNUM и ограничивающих результатах в Oracle/AskTom для получения дополнительной информации.
Обновление : Для ограничения результата и с вещами нижних и с верхних границ становятся более чрезмерно увеличенными в размерах с
select * from
( select a.*, ROWNUM rnum from
( ) a
where ROWNUM <= :MAX_ROW_TO_FETCH )
where rnum >= :MIN_ROW_TO_FETCH;
(Скопированный с указанной AskTom-статьи)
Обновление 2 : Запуск с Oracle 12c (12.1) существует синтаксис, доступный, чтобы ограничить строки или запуститься при смещениях.
SELECT *
FROM sometable
ORDER BY name
OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;
См. этот ответ для большего количества примеров. Благодаря Krumia для подсказки.
Значение
действительно изменяемое; вы указываете нужный тип данных в модуле ctypes
, а затем его можно изменять. Вот полный рабочий сценарий, демонстрирующий это:
from time import sleep
from ctypes import c_int
from multiprocessing import Value, Lock, Process
counter = Value(c_int) # defaults to 0
counter_lock = Lock()
def increment():
with counter_lock:
counter.value += 1
def do_something():
print("I'm a separate process!")
increment()
Process(target=do_something).start()
sleep(1)
print counter.value # prints 1, because Value is shared and mutable
РЕДАКТИРОВАТЬ: Люпер правильно указывает в комментарии ниже, что значения Value
заблокированы по умолчанию. Это правильно в том смысле, что даже если присвоение состоит из нескольких операций (например, присвоение строки, которая может состоять из многих символов), то это присвоение является атомарным. Однако при увеличении счетчика вам все равно потребуется внешняя блокировка, как показано в моем примере, поскольку при увеличении загружается текущее значение, а затем оно увеличивается, а затем присваивается результат обратно Value
.
Итак без внешнего замка, вы можете столкнуться со следующим обстоятельством:
Value
, a происходит переключение контекста Value