Первые 10 строк

21 октября, 2018

Есть таблица с уникальным полем «ID». Вывести первые 10 строк (по возрастанию ID). Не использовать запросы типа «SELECT TOP 10».
Читать оставшуюся часть этой записи »

Печать чисел от 0 до 1000

19 октября, 2018

Напишите, пожалуйста, функцию (метод), которая будет печатать числа от 0 до 1000, кратные трём и не кратные пяти, сумма цифр в которых меньше десяти.
Читать оставшуюся часть этой записи »

XML

6 октября, 2018

Имеется

xmltype('
<root>
  <row>
    <col>v11</col>
    <col>v12</col>
    <col>v13</col>
    <col>v14</col>
  </row>
  <row>
    <col>v21</col>
    <col>v22</col>
    <col>v23</col>
    <col>v24</col>
  </row>
</root>')

Необходимо:
а) Получить выборку

C1   C2   C3   C4

—- —- —- —-

v11  v12  v13  v14

v21  v22  v23  v24

Условия: количество узлов row может варьироваться, col всегда статично = 4 шт в пределах row.
Читать оставшуюся часть этой записи »

Использование pipelined функции

29 сентября, 2018

Имеется таблица dept со следующей структурой:

Name   Type         Nullable Default Comments 
------ ------------ -------- ------- -------- 
DEPTNO NUMBER                                 
DNAME  VARCHAR2(14) Y                         
LOC    VARCHAR2(13) Y

Необходимо реализовать функцию PL/SQL которая будет возвращать выборку из таблицы dept заданную минимальным и максимальным значением поля DEPTNO. Реализуемая функция должна использовать метод pipelined.
Читать оставшуюся часть этой записи »

Регулярные выражения

29 сентября, 2018

Задана строка ‘1,2,3,4’, необходимо, используя регулярные выражения в запросе получить результат:
C1 C2 C3 C4
— — — —
1 2 3 4
Читать оставшуюся часть этой записи »

Коллекции

29 сентября, 2018

Имеется декларация типа:

CREATE OR REPLACE TYPE TNUM as table of number;

Необходимо написать реализацию функции, возвращающая в качестве результата заполненный массив, имеющий тип TNUM с значениями от 1…1000
Читать оставшуюся часть этой записи »

Задвоение данных

29 сентября, 2018

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

create table t (a number, b number);

Пример данных:
a b
1 1
2 2
2 2
3 3
3 3
3 3
Требуемый результат:
a b
1 1
2 2
3 3
Вариант решения:

delete from t
 where rowid not in (select max(rowid) from t group by t.a, t.b);

Случайные числа

29 сентября, 2018

Вывести 1000 случайных чисел от 1 до 1000, таких что не повторяются в этой последовательности, больше чем 3 раза.

select r.*
  from (select round(dbms_random.value(1, 1000)) as v
          from dual
        connect by level <= 1000) r
 group by r.v
having count(*) < 4;

Сколько строк будет добавлено в таблицу

24 декабря, 2017
CREATE TABLE T (A NUMBER, B NUMBER);

ALTER TABLE T ADD CONSTRAINT UK UNIQUE (A, B);

INSERT INTO t (a, b) VALUES (NULL, NULL);
INSERT INTO t (a, b) VALUES (NULL, NULL);

INSERT INTO t (a, b) VALUES (NULL, 1);
INSERT INTO t (a, b) VALUES (NULL, 1);

INSERT INTO t (a, b) VALUES (1, NULL);
INSERT INTO t (a, b) VALUES (1, NULL);

INSERT INTO t (a, b) VALUES (1, 1);
INSERT INTO t (a, b) VALUES (1, 1);

SELECT * FROM t;
/

Электронная почта и доменная зона

24 декабря, 2017

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

Тестовые данные:

CREATE TABLE "EMAIL"("EMAIL_NAME" VARCHAR2(4000 CHAR));

COMMENT ON TABLE "EMAIL" IS 'Адрес электронной почты';
COMMENT ON COLUMN "EMAIL"."EMAIL_NAME" IS 'Наименование';

CREATE TABLE "DOMAIN"("DOMAIN_NAME" VARCHAR2(4000 CHAR));

COMMENT ON TABLE "DOMAIN" IS 'Домен';
COMMENT ON COLUMN "DOMAIN"."DOMAIN_NAME" IS 'Наименование';

INSERT INTO domain (domain_name) VALUES ('ru');
INSERT INTO domain (domain_name) VALUES ('com');
INSERT INTO domain (domain_name) VALUES ('рф');

INSERT INTO email (email_name) VALUES ('user1@gmail.ru');
INSERT INTO email (email_name) VALUES ('user2@mail.rud778dfuds');
INSERT INTO email (email_name) VALUES ('user3@mail.com7');
INSERT INTO email (email_name) VALUES ('user4@mai4com7');
INSERT INTO email (email_name) VALUES ('user5@yandex.рф');
INSERT INTO email (email_name) VALUES ('user6@gmail.com');
/

Читать оставшуюся часть этой записи »