Не могу понять что синтаксис oracle sql

Вопрос задан

Изменён 7 лет 6 месяцев назад

Просмотрен 231 раз

ALTER TABLESPACE PROBATBS ADD DATAFILE 'C:\ORACLE\ORADATA\PROBA\PRBTWO.DAT'
SIZE 50M REUSE AUTOEXTEND ON NEXT 10M MAXSIZE 100M

То что он создаст базу с изначальным размером 10мегабайт и будет расширятся до 100мегабайт это понятно. А вот что это подразумевает "ON NEXT 10M"? что он будет делать на 10 мегабайт.

  • sql
  • oracle

Изначально создаст 50 М

расширять будет по 10 М

максимальный размер 100 М

REUSE — будет использовать удаленные ячейки

UPDATE

команда

ALTER TABLESPACE PROBATBS ADD DATAFILE 'C:\ORACLE\ORADATA\PROBA\PRBTWO.
DAT' SIZE 50M REUSE AUTOEXTEND ON NEXT 10M MAXSIZE 100M

добавляет новый файл в разделе C: для Tablespace PROBATBS дополнительный файл размером 50М. Этот раздел может увеличиватся до 100М с шагом 10М автоматически. То есть, файл когда достигнет 100М он дальше не будет увеличиваться.

если вам нужно еще расширить этот tablespace вы можете сделать это используя другой диск. к примеру

ALTER TABLESPACE PROBATBS ADD DATAFILE 'D:\ORACLE\ORADATA\PROBA\PRBT_2.DAT'
SIZE 50M REUSE AUTOEXTEND ON NEXT 10M

тут как видите нету MAXSIZE 100M он будет расширятся до упора

а удаленные ячейки (мусор)

будет сам автоматически очищать. Главное что бы в С: диске всегда было место до 100М

P.S. добавил Update после комментариев

3

Ребята,

  • нет никаких «автоочистка сама запустится»
  • REUSE — это не про «ячейки», это говорит о том, что если файл с таким именем уже существует, команда не выпадет с ошибкой, а переиспользует (перезатрет) существующий файл
  • ячеек, кстати, тоже нет — есть блоки данных, но сейчас тут у вас речь не про них
  • если авторасширение (autoextend) настроено для табличного пространства — тот факт, что в нем периодически будет 99% занято — не проблема, как только Оракл не сможет выделить очередной
    экстент
    , файл данных расширится на значение, указанное в NEXT

При необходимости расширит размер пространства:

AUTOEXTEND ON — включает функцию авторасширения размера файла

NEXT 10M — минимальный размер приращения к размеру файла при расширении

Полезные ссылки:

http://docs. oracle.com/cd/B28359_01/server.111/b28310/dfiles003.htm

http://www.dba-oracle.com/t_alter_autoextend_on.htm

Зарегистрируйтесь или войдите

Регистрация через Google

Регистрация через Facebook

Регистрация через почту

Отправить без регистрации

Почта

Необходима, но никому не показывается

Отправить без регистрации

Почта

Необходима, но никому не показывается

Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки

sql — Каков синтаксис для функционального аналога SELECT TOP(N) в Oracle?

Предположим, есть таблица TABLE

ID | DEF
 1 | Один
 2 | Два
 3 | Три
 4 | Четыре

Тогда запрос в MS SQL Server

SELECT TOP(2) * FROM TABLE ORDER BY ID DESC

Даст нам выдачу:

ID | DEF
 4 | Четыре
 3 | Три

А аналогичный запрос в Oracle (аналог, который мне предложился в интернетах)

SELECT * FROM TABLE WHERE ROWNUM <= 2 ORDER BY ID DESC

Даст нам выдачу:

ID | DEF
 2 | Два
 1 | Один

Как получить действительно аналогичный по функциональности синтаксис для Oracle?

  • sql
  • база-данных
  • sql-server
  • oracle
  • plsql-developer

0

В оракле до 11-й версии включительно — через подзапрос с row_number:

select *
  from (select t. *, row_number() over (order by id desc) rn
          from t)
 where rn <= 2

В 12-й версии появился синтаксис для первых N строк с LIMIT и OFFSET, почти как в постгресе (запрос скопипастил из интернета, 12-го оракла под рукой нет):

 select *
   from t
  order by id desc
 OFFSET 5 ROWS FETCH NEXT 5 ROWS ONLY;

Дело в том, что Oracle сначала выполняет условие where и только потом производит сортировку. То есть в вашем случае сначала остаются строки с id in (1, 2) и потом они и сортируются.

Для получения аналогичного результата сначала надо отсортировать все данные и потом обернув запрос получить нужное количество строк:

SELECT * 
FROM (SELECT * 
      FROM   TABLE 
      ORDER  BY ID DESC) 
WHERE ROWNUM <= 2

Вам придётся воспользоваться подзапросом. Т.е. ваш запрос с основными условиями и сортировкой перенесите в подзапрос, а ограничение на выбор поставьте в секцию

WHERE внешнего запроса.

SELECT * 
FROM
  (
  SELECT * 
  FROM TABLE 
  ORDER BY ID DESC 
  )
WHERE 
ROWNUM <= 2 

1

Начиная с версии 12.1.0.1 Oracle БД поддерживает введённый в стандарте SQL:2008 FETCH FIRST|NEXT синтаксис (см. row_limiting_clause для полного описания).

Воспроизводимый рабочий пример:

with tab (id, def) as (
    select rownum, trim (column_value)
    from xmlTable ('"Один", "Два", "Три", "Четыре"')
) 
select *
from tab
order by id desc
fetch first 2 rows only;

Результат:

        ID DEF       
---------- ----------
         4 Четыре    
         3 Три       

Надо отметить, что поддерживаемый MS SQL Server SELECT TOP(N) синтаксис не является стандартным.

Зарегистрируйтесь или войдите

Регистрация через Google

Регистрация через Facebook

Регистрация через почту

Отправить без регистрации

Почта

Необходима, но никому не показывается

Отправить без регистрации

Почта

Необходима, но никому не показывается

Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки

Рабочий лист SQL для базового синтаксиса SQL

    Сожалеем. Мы не смогли найти совпадение по вашему запросу.

    Мы предлагаем вам попробовать следующее, чтобы найти то, что вы ищете:

    • Проверьте правильность написания вашего ключевого слова.
    • Используйте синонимы для введенного вами ключевого слова, например, попробуйте «приложение» вместо «программное обеспечение».
    • Начать новый поиск.

    Связаться с отделом продаж

    Меню Меню

    После выполнения этого руководства вы сможете понять, как использовать рабочий лист SQL для ввода команд SQL и SQL*Plus.

    1. Введение

    Oracle SQL Developer предоставляет рабочий лист SQL, который можно использовать для запроса данных путем написания простых или сложных операторов SQL. В этом практическом руководстве мы рассмотрим самые основные из них, выберем все данные в таблице и ограничим этот запрос, сократив извлекаемые столбцы или строки.

    2. Требования к программному обеспечению

    • Oracle Database 9.
      2.0.1 или выше
    • Доступ к образцу учетной записи пользователя HR

    3. Просмотрите свои данные

    3.1. Напишите оператор Select

    После подключения к базе данных вы готовы просматривать схему, запрашивать и изменять данные.

    1. После создания соединения с базой данных необходимо убедиться, что у вас открыт рабочий лист SQL. Если рабочий лист не открыт, используйте контекстное меню, чтобы открыть его.

    2. После подключения вы должны увидеть окно рабочего листа SQL.

    3. Теперь вы готовы начать. Запросите все данные в таблице DEPARTMENTS. Введите

    выбрать * из отделов;

    Щелкните Выполнить оператор или F9.

    Обратите внимание, что количество извлеченных строк отображается под вкладкой «Результаты».

    3.2. Извлечение столбцов

    Вместо того, чтобы выбирать все столбцы из таблицы, вы можете их детализировать, выбирая только те данные, которые вам нужны.

    1. Вместо того, чтобы вводить имя каждого столбца, вы можете просто перетащить имя таблицы из Навигатора подключений. Разверните узел Таблицы и перетащите таблицу EMPLOYEES на рабочий лист.

    Для более сложных запросов или инструкций используйте функцию Format (Ctrl+F7), чтобы упростить чтение SQL. Это можно найти в контекстном меню.

    2. Теперь удалите последние 3 столбца из выписки. Пример показан ниже.

    Удалите «,» после столбца SALARY и нажмите F9, чтобы получить записи.

    3.3. Получить строки

    Часто требуется ограничить количество возвращаемых записей. Вы добавляете предложение Where, чтобы сделать это. Они могут быть сложными и запутанными. Начнем с самого основного.

    1. Используя тот же оператор Select, что и выше, удалите ‘ ; ‘ и добавьте

    , где Department_id = 100;

    Нажмите F9. На вкладке «Результаты» показано меньше возвращенных записей.

    4. Используйте команды SQL*Plus

    Рабочий лист SQL позволяет использовать набор команд SQL*Plus. Команды SQL*Plus должны быть интерпретированы рабочим листом SQL перед передачей в базу данных. Некоторые команды не поддерживаются и поэтому игнорируются и не отправляются в базу данных Oracle. Список неподдерживаемых команд SQL*Plus см. в разделе SQL Developer на OTN.

    1. Чтобы использовать команду «Описать» для описания объекта схемы, введите:

    описать сотрудников

    Вместо нажатия F9 выберите «Выполнить сценарий» или F5.

    Обратите внимание, что количество извлеченных строк отображается на вкладке Script Output.

    2. Используем это. Чтобы определить, какими объектами владеет эта схема и что они из себя представляют, вы можете посмотреть таблицу словаря user_objects.

    Вместо использования ‘SELECT * from USER_OBJECTS’ вам нужно найти более конкретную информацию, введите:

    ОПИСАНИЕ ПОЛЬЗОВАТЕЛЬСКИХ_ОБЪЕКТОВ

    Нажмите F5.

    3. Теперь, когда вы увидели столбцы, определяющие таблицу, вы можете написать оператор выбора. Введите:

    выберите имя_объекта, тип_объекта
    из пользовательских_объектов;
                
             

    Нажмите F9.

    Отображаемые результаты — это объекты, принадлежащие вашей схеме HR.

    Дополнительные ресурсы

    Запрос данных из одного или нескольких столбцов таблицы

    Резюме : в этом руководстве вы узнаете, как использовать Oracle Оператор SELECT для запроса данных из одной таблицы.

    В Oracle таблицы состоят из столбцов и строк. Например, таблица клиентов в образце базы данных имеет следующие столбцы: customer_id , имя , адрес , веб-сайт и кредит_лимит . В таблице   клиентов также есть данные в этих столбцах.

    Чтобы получить данные из одного или нескольких столбцов таблицы, вы используете SELECT 9Оператор 0121 со следующим синтаксисом:

     

    SELECT столбец_1, столбец_2, ... ОТ имя_таблицы;

    В этом операторе SELECT :

    • Сначала укажите имя таблицы, из которой вы хотите запросить данные.
    • Во-вторых, укажите столбцы, из которых вы хотите получить данные. Если у вас более одного столбца, вам нужно разделить каждый запятой (,).

    Обратите внимание, что оператор SELECT очень сложный и состоит из множества предложений, таких как ЗАКАЗАТЬ , ГРУППИРОВАТЬ , ИМЕТЬ , ПРИСОЕДИНЯТЬСЯ . Для простоты в этом руководстве мы сосредоточимся только на предложениях SELECT и FROM .

    Давайте рассмотрим несколько примеров использования инструкции Oracle SELECT , чтобы понять, как она работает.

    A) запросить данные из одного столбца

    Чтобы получить имена клиентов из таблицы клиентов , используйте следующий оператор:

     

    ВЫБОР имя ОТ клиенты;

    Следующий рисунок иллюстрирует результат:

    B) Запрос данных из нескольких столбцов

    Чтобы запросить данные из нескольких столбцов, укажите список имен столбцов, разделенных запятыми.

    В следующем примере показано, как запросить данные из столбцов customer_id , name и Credit_limit таблицы customer .

     

    ВЫБЕРИТЕ Пользовательский ИД, имя, кредитный лимит ОТ клиенты;

    Ниже показан результат:

    C) Запрос данных из всех столбцов таблицы

    В следующем примере извлекаются все строки из всех столбцов таблицы клиентов :

     

    SELECT Пользовательский ИД, имя, адрес, Веб-сайт, кредитный лимит ОТ клиенты;

    Вот результат:

    Для удобства вы можете использовать сокращенную звездочку (*), чтобы указать Oracle возвращать данные из всех столбцов таблицы следующим образом:

     

    ВЫБЕРИТЕ * ОТ клиентов;

    Обратите внимание, что никогда не следует использовать звездочку (*) при внедрении запроса в приложения.