Oracle
Краткое практическое руководство разработчика информационных систем на базе СУБД ORACLE
Ссылки
Oracle® RepositoryDesigner 6i
SQL*PLUS
SQL
PLSQL
Replication
DDL, DML, ...
  • DDL - Data Definition Language (CREATE ...)
  • DML - Data Manipulation Language (INSERT ...)
  • DCL - Data Control Language (GRANT ...)
  • TCL - Transaction Control Language (COMMIT ...)
  • DR - Data Retrievl
FORMATS
Типы данных
  • VARCHAR2(size) Символы 1..4000
  • CHAR[(size)] - символы 1..2000
  • NUMBER[(p,s)] - p - число цифр, s - число цифр после зпт. 1..38
  • DATE - дата и время без секунд
  • LONG - символы до 2Г
  • CLOB - символы до 4Г
  • RAW(size) - бинарные данные 1..2000
  • LONG ROW - бинарные данные до 2Г
  • BLOB - бинарные данные до 4Г
  • BFILE - бинарные данные во внешнем файле до 4Г
  • TIMESTAMP[(p)] [WITH TIME ZONE] - дата с сек, p - точность секунд 0..6..9
  • TIMESTAMP[(p)] [WITH LOCAL TIME ZONE] - дата с сек, p - точность секунд
  • INTERVAL YEAR[(p)] TO MONTH - интервал в месяцах
  • INTERVAL DAY TO SECOND - интервал в секундах
Последовательности
select seq_attribute_type_id.nextval into p_id from dual;
Функции замены аргументов
  • NVL(a1,a2) возвращает a2 если a1 NULL
  • NVL2(a1,a2,a3) возвращает a2 если a1не NULL, иначе a3
  • NULLIF(a1,a2) возвращает NULL если a1 = a2
  • COALESCE(a1,..,aN) возвращает первое не NULL
  • DECODE(param,a1,r1,a2,r2,...,default)
    Возвращает значение rX если param совпадает с aX. Если не совпадает не с одним из параметров, то возвращает значение default.
Числовые функции
  • BITAND (a, b) возвращает a & b
  • CEIL (15.7) возвращает целое большее или равное (16)
  • FLOOR (15.7)  возвращает целое меньшее или равное (15)
  • TRUNC (15.79,m) обрезает число до указанного количества знаков. m может быть отрицательным.
  • ROUND (15.193,m) округляет число до указанного количества знаков. m может быть отрицательным.
  • WIDTH_BUCKET(credit_limit, min, max, cnt) возвращет номер сегмента в которое попадает число. Размер сегмента равен (max-min)/cnt. Если число меньше min, то возвращает 0, если больше max, то возвращает cnt+1
  • MOD(1600,300) остаток от деления

 

Символьные функции
  • CHR (45) возвращает символ с заданным кодом
  • CONCAT (a,b) возвращает конкатенцию двух строк
  • INITCAP (a) капитализирует первую букву каждого слова.
  • LOWER (a)переводит все символы в нижний регистр.
  • LPAD ('Page 1',15,'*.') заполняет указынным набором сиволов строку слева до указанной длины.
  • LTRIM ('xyxXxyLAST WORD','xy') убирает слева указанную комбинацию символов.
  • REPLACE ('JACK and JUE','J','BL') заменяет комбинацию символов.
  • RPAD ('MORRISON',12,'ab') заполняет указынным набором сиволов строку справа до указанной длины.
  • RTRIM ('BROWNINGyxXxy','xy') убирает справа указанную комбинацию символов.
  • SUBSTR ('ABCDEFG',position,length) вырезает подстроку. Если position меньше 0, то отсчет идет от конца строки, но выборка все равно слева направо. 
  • TRANSLATE ('2KRW229', '01234567', 'ABCDEFJH') замещает символы строки from, на символы строки to. Если встречается символ, которого нет в from, то он пропускается. Если строка from короче to и встречается символ выходящий за диапазон, то он удаляется.
  • TREAT (VALUE(p) AS employee_t).salary salary производит преобразование типа к одному из базовых. Если выражение не принадлжет к указанному типу, то возвращает NULL.
  • TRIM (0 FROM '0009872348900') убирает указанные символы спереди и конца строки.
  • UPPER('Large') переводит все символы в верхний регистр.
  • ASCII ('Q') возвращает код символа.
  • INSTR ('CORPORATE FLOOR','OR', position, occurrence) возвращает номер позиции вхождения подстроки в строке. Position задает стартовую позицию, а occurrence номер вхождения.
  • LENGTH('CANDIDE') возвращает длину строки.
Функции для дат
  • ADD_MONTHS (hire_date,1) добавить месяц.
  • CURRENT_DATE текущие дата и время.
  • DBTIMEZONE временная зона.
  • EXTRACT (YEAR FROM DATE '1998-03-07') возвращает указанную часть даты.
  • LAST_DAY (SYSDATE) возвращает последний день месяца.
  • MONTHS_BETWEEN (d1,d2) возвращает количество месяцев между датами.
  • NEXT_DAY ('02-FEB-2001','TUESDAY') возвращает следующую дату для указанного дня недели.
  • ROUND (TO_DATE ('27-OCT-00'),'YEAR') округляет дату.
  • TRUNC(TO_DATE('27-OCT-92','DD-MON-YY'), 'YEAR')  обрезает дату.
Функции преобразования
  • ASCIISTR ('ABACDE') возвращает строку из ASCII символов.
  • BIN_TO_NUM (1,1,1,1) преоразует битовый набор в число.
  • CAST (ad_sourcetext AS VARCHAR2(30)) преобразует тип.
  • CHARTOROWID ('AAAFd1AAFAAAABSAA/') преобразует символьный код в ROWID.
  • CONVERT ('A E I O O A B C D E ', 'US7ASCII', 'WE8ISO8859P1') преобразует символьную строку из одного char set в другой.
  • ROWIDTOCHAR (ROWID) преобразует RAWID в строку.
  • TO_CHAR (ts_col, 'DD-MON-YYYY HH24:MI:SSxFF') преобразует дату в строку.
  • TO_CHAR (n,fmt) преобразует число в строку. См. форматы.
  • TO_DATE ( char [, fmt]) преобразует страку в дату.
  • TO_NUMBER( char [, fmt ] ) преобразует строку в число.
Подзапросы. With
WITH
dept_costs AS (SELECT departament_name, SUM(salary) AS dept_total
FROM employees
INNER JOIN departments ON departments.departament_id = employees.departament_id
GROUP BY department_name ),
avg_costs AS (SELECT SUM(dept_total)/COUNT(*) AS dept_avg 
FROM dept_costs )

SELECT * FROM dept_costs
WHERE dept_total > (SELECT dept_avg FROM avg_costs)
ORDER BY department_name;
Иерархические запросы
SELECT [LEVEL], column, ...
FROM table
[WHERE condition(s)]
START WITH column0 = value
CONNECT BY PRIOR column1 = column2;
Top down: column1 = ParentKey, column2 = ChildKey
Bottom up: column1 = ChildKey, column2 = ParentKey
FROM employees
START WITH employee_id = 101
CONNECT BY PRIOR manager_id = employee_id;
INSERT
Безусловная вставка в обе таблицы
INSERT ALL
INTO sal_history VALUES(EMPID,HIREDATE,SAL)
INTO mgr_history VALUES(EMPID,MGR,SAL)

SELECT employee_id EMPID, hire_date HIREDATE, salary SAL, manager_id MGR
FROM employees

Вставка по условию. Оба условия проверяются.
INSERT ALL
WHEN SAL > 10000 THEN INTO sal_history VALUES(EMPID,HIREDATE,SAL)
WHEN MGR > 200 THEN INTO mgr_history VALUES(EMPID,MGR,SAL)

SELECT employee_id EMPID, hire_date HIREDATE, salary SAL, manager_id MGR
FROM employees

Вставка по условию. При совпадение одного из условий другие пропускаются
INSERT FIRST
WHEN SAL > 10000 THEN INTO sal_history VALUES(EMPID,HIREDATE,SAL)
WHEN MGR > 200 THEN INTO mgr_history VALUES(EMPID,MGR,SAL)
ELSE INTO hiredate_history(EMPID,HIREDATE)

SELECT employee_id EMPID, hire_date HIREDATE, salary SAL, manager_id MGR
FROM employees

Вставка или обновление
DECLARE
  v_empno employees.employee_id%TYPE := 100;
BEGIN
 MERGE INTO copy_emp c
  USING employees e
  ON (c.employee_id = v_empno)
 WHEN MATCHED THEN
  UPDATE SET
   c.first_name = e.first_name,
   c.last_name = e.last_name,
   ...
 WHEN NOT MATCHED THEN
  INSERT VALUES(e.employee_id, e.first_name, e.last_name, ...);
END; 
Bind variables
VARIABLE g_salary NUMBER
VARIABLE g_name CHAR(30)
BEGIN
 SELECT salary, name INTO :g_salary, :g_name 
 FROM employees
 WHERE employee_id = 178;
END;
/
PRINT g_name g_salary
Ограничение количества строк в выборке, ROWNUM
SELECT column_list, ROWNUM
FROM (SELECT column_list FROM table ORDER BY ...)
WHERE ROWNUM <= N
DBMS_JOB
VARIABLE jobno NUMBER BEGIN DBMS_JOB.SUBMIT(
job
  =>
   :jobno, what =
   > 'over_pack.add_dept(''EDUCATION'',2710);', next_date
   => TRUNC(SYSDATE+1), interval
   = > 'TRUNC(SYSDATE+1)'
);
   COMMIT;


 DBMS_JOB.RUN(121);

 DBMS_JOB.REMOVE(121);
END;

select * from DBA_JOBS;
Стандартные пакеты
  • DBMS_ALERT - *для уведомления всех заинтересованных сеансов об определенном событии.
  • DBMS_PIPE - позволяет двум сеансам взаимодействовать, аналогично тому, как это происходит через сокет TCP/IP.
  • DBMS_APPLICATION_INFO - Позволяет приложению записать полезную информацию в представления V$. Незаменим в случае контроля действий хранимой процедуры и записи другой информации.
  • DBMS_JOB - *планировщик заданий в базе данных.
  • DBMS_LOB - *пакет для работы с большими объектами.
  • DBMS_LOCK - пакет для создания пользовательских блокировок, независимых от блокировок уровня строки или таблицы, устанавливаемых сервером Oracle.
  • DBMS_LOGMNR - пакет для просмотра и анализа содержимого активных журналов повторного выполнения.
  • DBMS_OBFUSCATION_TOOLKIT - обеспечивает шифрование данных в базе.
  • DBMS_OUTPUT - обеспечивает простые средства вывода информации на экран из PL/SQL для среды SQL*Plus и SVRMGRL.
  • DBMS_PROFILER - профилировщик исходного кода PL/SQL, встроенный в базу данных.
  • DBMS_UTILITY - "сборная солянка" полезных процедур.
  • UTL_FILE - обеспечивает средства ввода-вывода текстовых и двоичных файлов в PL/SQL.
  • UTL_HTTP - обеспечивает работу по протоколу HTTP из среды PL/SQL. Позволяет загружать Web-страницы в PL/SQL.
  • UTL_RAW - обеспечивает преобразование данных типа RAW в VARCHAR2, и наоборот. Используется для работы с протоколом TCP/IP, при обработке больших объектов типа BLOB и BFILE, а также для шифрования.
  • UTL_SMTP - обеспечивает работу по протоколу SMTP из среды PL/SQL. В частности, позволяет послать сообщение по электронной почте из PL/SQL.
  • UTL_TCP - предоставляет средства работы с сокетами TCP/IP в языке PL/SQL.
  • DBMS_SQL, DBMS_DDL - динамический SQL.
  • DBMS_REPCAT - управление репликацией.
Спецификации пакетов
select text
from all_source
where name = 'DBMS_OUTPUT'
and type = 'PACKAGE'
order by line
* - помечены трензакционные пакеты
-
-
Hosted by uCoz