Работа со строками в Oracle (PL/SQL)
Осваиваем Oracle и PL/SQLОсновные способы обработки строковых значений в Oracle.
В этой публикации я приведу основные функции работы со строками которые встречались мне в работе, и будут полезны всем кто работает с Oracle.
CONCAT — Объединяет две строки
SQL> select concat('Пётр ','первый') from dual;
CONCAT('ПЁТР','ПЕРВЫЙ')
-----------------------
Пётр первый
Читаль далее...
Работа с XML в Oracle PL/SQL (Часть 1)
Осваиваем Oracle и PL/SQLВ этой публикации я приведу основные способы работы с XML в Oracle, которые сам использую.
Здесь будут рассмотрены на примерах такие операторы и функции как: XMLType, XMLElement, xmlattributes, XMLAGG, XMLSequence, insertchildxml, xmlconcat.
Итак начнем с объявления переменной в которой будем хранить текст XML.
Делается это так:
declare
--Задаем переменную
my_var XMLType;
begin
--Присваиваем значение нашей переменной
my_var:= XMLType('<root><item>Просто пробуем XML в Oracle</item></root>');
--Выводим в вывод
dbms_output.put_line(my_var.GetClobVal());
end;
Для начала рассмотрим некоторые приёмы работы с XML, чуть позже перейдем к генерации XML из данных при выборке.
Читаль далее...
Oracle PLSQL XMLType XMLElement xmlattributes XMLAGG XMLSequence insertchildxml xmlconcat
Как отлавливать ошибки в Oracle (PLSQL) EXCEPTION,SQLERRM,SQLCODE
Осваиваем Oracle и PL/SQLМаленькое руководство по отлавливанию ошибок в Oracle PLSQL.
Описание как использовать в Oracle (PLSQL) функции SQLERRM и SQLCODE для отлова ошибок EXCEPTION, с описанием синтаксиса и примером.
Функция SQLERRM возвращает сообщение об ошибке связанное с последним возникшим исключением (ошибкой).
Функция SQLERRM — не имеет параметров.
Функция SQLCODE возвращает код ошибки связанный с последним возникшим исключением (ошибкой)
Функция SQLERRM — не имеет параметров.
Обычно обработка исключений EXCEPTION выглядит следующим образом:
EXCEPTION
WHEN наименование_ошибки_1 THEN
[statements]
WHEN наименование_ошибки_2 THEN
[statements]
WHEN наименование_ошибки_N THEN
[statements]
WHEN OTHERS THEN
[statements]
END [наименование_процедуры];
Вы можете использовать функции SQLERRM и SQLCODE для вызова сообщения об ошибке например таким образом:
EXCEPTION
WHEN OTHERS THEN
raise_application_error(-20001,'Произошла ошибка - '||SQLCODE||' -ERROR- '||SQLERRM);
END;
-- В данном случае появится всплывающее сообщение.
Читаль далее...
Oracle PLSQL SQL EXCEPTION SQLERRM SQLCODE ошибки программирование
Создание пользователя (схемы) в Oracle
Осваиваем Oracle и PL/SQLПример простого создания пользователя (схемы) в БД Oracle:
--Создаем нового пользователя test с паролем 240580
create user test IDENTIFIED BY 240580
default tablespace users
temporary tablespace temp
--Добавляем квоту на дисковое пространство.
alter user test quota 100M on users;
--Разрещаем создавать сессии пользователю (подключаться)
grant create session to test
--Разрешаем создавать таблицы пользователю
grant create table to test
Читаль далее...
Функция Oracle TO_CHAR (PL/SQL)
Осваиваем Oracle и PL/SQLФункция TO_CHAR — преобразует дату или число в строку.
Синтаксис:
TO_CHAR(исходное_значение, Формат, NLS_LANGUAGE);
--В качестве исходного значения может быть передана как дата <strong>DATE</strong> так и число <strong>NUMBER</strong>.
--Последний параметр NLS_LANGUAGE (как я понимаю для задания кодировки) мне не разу не пригодился.
Читаль далее...
Функция Oracle TO_DATE (PL/SQL)
Осваиваем Oracle и PL/SQLФункция TO_DATE — преобразует строку в переменную времени DATE.
Синтаксис:
TO_DATE(исходная_строка, Формат, NLS_LANGUAGE);
--Последний параметр NLS_LANGUAGE (как я понимаю для задания кодировки) мне не разу не пригодился.
Читаль далее...
Исправляем ошибку ORA-00604: error occured at recursive SQL level 1ORA-12705 в Oracle SQL Developer
Осваиваем Oracle и PL/SQLОшибка при установке соединения с сервером из Oracle SQL Developer:
ORA-00604: error occured at recursive SQL level 1ORA-12705: Cannot access NLS data files or invalid enviroment specified
Для исправления делаем следующие действия:
Открываем <папку_со_средой>\ide\bin\ide.conf
Дописываем туда две строчки:
AddVMOption -Duser.language=en
AddVMOption -Duser.region=us
И всё!
Объединение выборок UNION, INTERSECT, MINUS в Oracle (PL/SQL)
Осваиваем Oracle и PL/SQLВ Oracle присутствует возможность объединять выборки. Для объединения используются операторы: UNION (с вариацией UNION ALL), INTERSECT и MINUS. Рассмотрим работу всех этих операторов.
1. UNION и UNION ALL
UNION — объединяет наборы данных, но при этом исключает дублирующие записи, тоесть если у вас в первом и во втором наборе есть одинаковая запись то в результирующем наборе будет только одна такая запись.
UNION ALL — объединяет наборы данных и оставляет дублирующие записи, тоесть если в первом и во втором наборе есть одинаковые записи то в результирующем наборе будут все эти записи.
Для экспериментов, создадим две таблицы и заполним их тестовыми данными.
XML в Oracle PL/SQL (Часть 2 - Выборки в виде XML)
Осваиваем Oracle и PL/SQLВ предыдущей публикации были рассмотрены некоторые приёмы манипуляции с XML в Oracle, теперь рассмотрим как делать выборку данных напрямую в XML. Это на мой взгляд самая интересная часть.
На практике выяснилось, что для Oracle в большинстве случаев не существенно, вернуть ли набор записей или сформированную готовую XML этого набора записей — по времени выполнения эти действия субъективно практически равноценны. Но вот если у вас есть потребность в формировании некоторой XML структуры в приложении на основе данных полученных из БД Oracle, практически наверняка это будет довольно ресурсоемкое мероприятие, гораздо легче переложить этот функционал на базу данных, хотя на первый взгляд и кажется что это не то, чем должен заниматься движок базы данных.
Oracle PLSQL XMLType XMLElement xmlattributes XMLAGG XMLSequence insertchildxml xmlconcat
Размер Таблиц и Tablespace в Oracle
Осваиваем Oracle и PL/SQLУзнаем сколько занимает каждый TableSpace:
(Размер указан в мегабайтах)
select a.tablespace_name, totalspace, nvl(freespace,0) freespace,
(totalspace-nvl(freespace,0)) used,
((totalspace-nvl(freespace,0))/totalspace)*100 "%USED"
from
(select tablespace_name, sum(bytes)/1048576 totalspace
from dba_data_files
group by tablespace_name) a,
(select tablespace_name, sum(Bytes)/1048576 freespace
from dba_free_space
group by tablespace_name) b
where a.tablespace_name = b.tablespace_name (+)
and ((totalspace-nvl(freespace,0))/totalspace)*100 > 90
order by 5 desc
Теперь узнаем сколько занимают таблицы в указанном TableSpace:
(Размер в мегабайтах, имя нужного TableSpace — берем из результатов предыдущего запроса, для всех при больших базах может выполняться долго)
select de.owner, de.segment_name, sum(de.bytes)/1048576, de.segment_type from dba_extents de
where de.owner in ('нужный tablespace')
group by de.owner, de.segment_name, de.segment_type
Вот и всё. Комментировать...