Что делать если результат выборки NULL а надо 0.

Вот такая вот задача появилась, в случае отсутствия данных в таблице результат выборки максимального значения в поле выдаст значение null, можно конечно обрабатывать полученный результат в программе, но значительно проще возложить этот функционал на скрипт.

Делается это вот так:

SELECT     (CASE WHEN MAX(ID) IS NULL THEN '0' ELSE MAX(ID) + 1 END) AS Expr1
FROM         MyTable


Теперь, если в выборке будет пусто, то-есть null, то в качестве результата выборки будет передан 0.

Подробнее

Копирование папки с вложениями на C#

Всегда считал что у .NET в System.IO существует какой нибудь метод который реализует копирование папки с содержимым, включая все подкаталоги и файлы. Оказалось что я ошибался, и такого метода нет. Поэтому привожу пример реализации этого действия, довольно простой функцией, при помощи System.IO.DirectoryInfo.

Подробнее

Курсоры в MSSQL - перебор выборки в цикле.

Команды манипулирования данными SELECT, UPDATE, DELETE работают сразу с группами строк. Эти группы, вплоть до отдельных строк, можно выбрать с помощью опции WHERE. А если надо перебрать строки некоторой таблицы последовательно, одну за другой? На этот случай в языке SQL существуют курсоры. Курсор (current set of record) – временный набор строк, которые можно перебирать последовательно, с первой до последней.

При работе с курсорами используются следующие команды.

Объявление курсора: 
DECLARE имя_курсора CURSOR FOR SELECT текст_запроса
Любой курсор создается на основе некоторого оператора SELECT.

Подробнее

Установка русской кодировки на уже созданную базу данных (смена COLLATION)

Полезный пример изменения кодировки (COLLATION) на уже созданной базе данных.
В данном примере устанавливается русская кодировка: Cyrillic_General_CI_AS

USE master;
GO

-- Переводим БД в single-user mode
ALTER DATABASE [имя_базы_данных]
SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO

-- Меняем кодировку COLLATION
ALTER DATABASE [имя_базы_данных]
COLLATE Cyrillic_General_CI_AS ;
GO

-- Переводим БД обратно в multi-user mode
ALTER DATABASE [имя_базы_данных]
SET MULTI_USER WITH ROLLBACK IMMEDIATE;
GO  
 
--Проверяем настройки COLLATION.
SELECT name, collation_name
FROM sys.databases
WHERE name = 'имя_базы_данных';
GO
Подробнее

Генерация MD5 HASH на Oracle PL/SQL

Простой пример генерации MD5 на Oracle PL/SQL.

declare
  cln_md5raw raw(2000);
  out_raw raw(16);
begin
  cln_md5raw := utl_raw.cast_to_raw('Наш текст для хеширования');
  dbms_obfuscation_toolkit.md5(input=>cln_md5raw,checksum=>out_raw);
  -- Выводится hex версия (32 символа)
  dbms_output.put_line(lower(out_raw));
end;



100% работает на версии Oracle 11g.

Подробнее

Резервное копирование и восстановление базы данных в Oracle - RMAN

Всё что описано ниже, выполнялось на Windows сервере.

Для создания Бэкапа открываем командную строку cmd.exe

В командной строке запускаем утилиту rman

Далее, для бэкапа базы данных без АрхивЛогов:

connect target user/password;
shutdown immediate;
startup mount;
backup database;
sql 'alter database open';
Подробнее

Oracle - Фичи и полезности

Полезные мелочи и запросы, которые могут пригодиться с их описанием.

1. Получаем список всех полей интересующей нас таблицы.

select  column_name 
  from user_tab_columns 
  where upper(table_name) = upper('название_таблицы')


2. Меняем формат даты по умолчанию в сессии.

alter session set NLS_DATE_FORMAT = 'dd.mm.yyyy hh24:mi:ss';

— Пока сессия не закрыта, будет действовать установленный таким образом формат.

Подробнее

Объединение выборок UNION, INTERSECT, MINUS в Oracle (PL/SQL)

В Oracle присутствует возможность объединять выборки. Для объединения используются операторы: UNION (с вариацией UNION ALL), INTERSECT и MINUS. Рассмотрим работу всех этих операторов.

1. UNION и UNION ALL

UNION — объединяет наборы данных, но при этом исключает дублирующие записи, тоесть если у вас в первом и во втором наборе есть одинаковая запись то в результирующем наборе будет только одна такая запись.
UNION ALL — объединяет наборы данных и оставляет дублирующие записи, тоесть если в первом и во втором наборе есть одинаковые записи то в результирующем наборе будут все эти записи.

Для экспериментов, создадим две таблицы и заполним их тестовыми данными.

Подробнее

Вставка записей в таблицу с одновременной проверкой и изменением в случае наличия записи в принимающей таблице MERGE в Oracle (MERGE INTO TABLE)

MERGE — Функция предназначенная для объединения результата некоторой выборки в принимающую таблицу, при этом вовсе не обязательно чтобы состав полей совпадал.

Применяется когда необходимо дополнить некоторую таблицу новыми данными, одновременно обновив уже имеющиеся в таблице данные.
Реализация:

merge into таблица_приемник t1
      using (select * from таблица_источник) t2
      on (t1.id = е2.id and t1.parent_id = t2.parent_id)
      when matched then 
	-- Обновляем если совпадение в таблице t1 найдено
        update 
         set t1.info = t2.info
      when not matched then 
	-- Добавляем если совпадение в таблице t1 не найдено
        insert 
         (t1.id, t1.parent_id, t1.info)
         values
         (t2.id, t2.parent_id, t2.info);
Подробнее