Pull to refresh

Comments 28

с пунктом 50 сильно ошибаетесь

with req_table (fields...) as (
select fields… from table t1

union all

select fields… from req_table t2…
)
Доброго времени суток. Ну… как сказать) Тут дело в терминологии. Экзамен так требует. В рамках экзамена — если речь идет о «Hierarchical query», то наличие start with и connect обязательно. Ну а в жизни, разумеется, все по разному можно представить и интерпретировать)
Так) Ну вот) Вы же используете connect. Наверное, надо было бы написать start with или connect. Так было бы корректнее.
Пункт 25 не совсем понятен. Это значит, что сделать колонку NULL или NOT NULL после создания таблицы уже нельзя?
Нет. Конечно можно. Просто есть два метода создания и модификации constraint-ов: inline и outline. Ну так вот, NOT NULL — может быть создани модифицирован только inline методом.
а если сделать так:

create table sample (a number not null, b number);
alter table sample add constraint(check b is not null);

(в синтаксической верности второй команды не уверен, а oracle под рукой нет, чтобы проверить).
Так вот, если посмотреть словарь данных, то будет ли разница между полями A и B? Насколько я помню, никакой.
Добрый день. Нет. Синтаксис второй команды некорректен. Нужно вот так:

alter table sample modify b not null;

И только так.
>> 18. DISTINCT можно использовать с любой из агрегирующих функций.
Почему-то справедливо только для чистого sql. В PLSQL, например,
declare
t char;
begin
  select stringagg(distinct dummy) into t
  from dual;
end;

Вернёт ora-30482. Справедливо и для некоторых других вроде collect\listagg.
1. PL/SQL не рассматривается на экзамене.

2. Я не встречал никогда данную функцию. Она built-in? Может устаревшая? В референсе тоже о ней ничего не сказано. Если есть информация, то скиньте линк, пожалуйста.

3. Иcпользуйте listagg.

4. Должен с Вами согласиться (из документации):

Many (but not all) aggregate functions that take a single argument accept these clauses:

DISTINCT and UNIQUE, which are synonymous, cause an aggregate function to consider only distinct values of the argument expression. The syntax diagrams for aggregate functions in this chapter use the keyword DISTINCT for simplicity.

ALL causes an aggregate function to consider all values, including all duplicates.
п. 11 неверен.
Если в списке есть NULL, то not in (..) вернёт NULL.
Разница в том, что
NOT FALSE = TRUE
NOT NULL = NULL

другими словами where X not in (1,2,3,NULL) и where not(x not in (1,2,3,NULL)) вернут одинаково пустые множества.
Доброго времени суток. Правильно. Я подразумевал, что FALSE вернет все WHERE-условие. Поправил.
Ну опять же ерунду написали. Откройте хотя бы документацию и посмотрите, чем NULL отличается от FALSE:

NULL AND FALSE = FALSE
NULL AND TRUE = NULL
NULL OR TRUE = TRUE
NULL OR FALSE = NULL

NULL — это не FALSE и не TRUE, это что-то типа «ХЗ». То есть NULL это не TRUE, но и NOT NULL — это тоже не TRUE, а отсюда возможны всякие забавные спецэффекты.
Спасибо еще раз) Я знаю что есть NULL. Скажем так: WHERE не сработает (я просто не знаю, что конкретно вернет сам WHERE NULL или FALSE — после того как NOT IN вернет NULL или FALSE), и весь запрос ничего не вернет. Хм?
Максимальная размерность… RAW = 4000 байт

Небольшая поправка:
Лимит для RAW = 2000 байт (если MAX_STRING_SIZE = STANDARD)

Сдавать данный экзамен можно сразу или требуются последовательно сдать Associate -> Professional?
На сайте вроде как не указано, что нужно иметь эти сертификаты. Но тогда вопрос — почему для Professional нужен Associate?
Данный экзамен можно сдавать отдельно. Он особняком. Он линейки Expert. Что касается другой профессиональной линейки, то тут уж все зависит, на что направление взяли. Скажите, конкретно, куда метите, я скажу.
п.36. Наверное имеется ввиду DDL, вместо DML.
Надеюсь тут просто опечатка насчет DML?

#36. Случаи, когда транзакция насильно завершается:
#…
#Пользователь издал любую DML или DCL команду.
#…
24 пункт ложный

select 'hello world'
from dual
having count(*)>1

вполне себе рабочий запрос где having без group by
Добрый день. Да ну) Рабочий значит запрос) Ну тогда покажите, пожалуйста, как Вы в ORACLE DB таким запросом извлечете данные из реального столбца? Или хотя бы, попробуйте, прокрутить вот этот запрос:
select dummy
from dual
having count(*)>1
Вывести количество строк таблицы если этих строк больше нуля. Случай частный
select count(*) from tbl having count(*)>1

1. я не утверждаю что этим запросом Вы решите свою бизнес задачу.
2. я увидел ошибку в утверждении п.24 — и написал это.
Доброго времени суток!
Спасибо Вам за комментарий!
Я понял, что Вы имеете ввиду. Правильно: данное выражение сработает и не выдаст ошибочки при компиляции. Но не в этом суть.
А суть п.24 в том, что нельзя использовать HAVING, если не происходит агрегации (т.е. GROUP). Поскольку, вопросы на экзамене, больше приближены к решению поседневных задач, следует настраиваться именно на это.
В тестовых же условиях — ради Бога :) Можете извращаться как угодно :)
В том числе, и выводить количество строк таблицы, «если этих строк больше нуля» :)
«если этих строк больше нуля» — вот чтобы понять каких же именно строк, то их надо сначала сгруппировать по какому-либо признаку, например:

WITH tbl
     AS (SELECT 'критерий1' criteria FROM DUAL
         UNION ALL
         SELECT 'критерий1' criteria FROM DUAL
         UNION ALL
         SELECT 'критерий2' criteria FROM DUAL
         UNION ALL
         SELECT 'критерий2' criteria FROM DUAL
         UNION ALL
         SELECT 'критерий2' criteria FROM DUAL
         UNION ALL
         SELECT 'критерий3' criteria FROM DUAL
         UNION ALL
         SELECT 'критерий3' criteria FROM DUAL
         UNION ALL
         SELECT 'критерий3' criteria FROM DUAL
         UNION ALL
         SELECT 'критерий3' criteria FROM DUAL)
  SELECT criteria, COUNT (*)
    FROM tbl
GROUP BY criteria
  HAVING COUNT (*) > 1


Так что пункт гласит не синтаксическое правило. А логическое.
В любом случае, еще раз спасибо за реакцию!
Sign up to leave a comment.

Articles