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 * - помечены трензакционные пакеты |
-
|
- |