Новости
- Неявне використання змінної циклу declare n number: = 100; begin for n in 1..10 loop dbms_output.put_line...
- Використання міток
- Основні об'єкти. Збережені процедури і функції
- Основні об'єкти. тригери
- Практичні заняття
- Підготовка SQL скриптів генерації схеми відносин БД в ERwin. Розробка скрипта для введення тестової...
- Архітектура MS SQL Server 2005. Налагодження та використання основних компонент середовища. Створення...
- Робота з СУБД MS SQL Server 2005, ORACLE 10g. Приклади з'єднань з БД, технології розробки кліенского додатки
- Робота з базами даних з J2EE Web-контейнера
- Об'єктно-реляційне відображення для роботи з базами даних
- Використання препроцесора для роботи з API СУБД
Неявне використання змінної циклу
declare n number: = 100; begin for n in 1..10 loop dbms_output.put_line (n); end loop; dbms_output.put_line ( 'after' || n); end; declare n number; begin for i in 1..10 loop n: = i; dbms_output.put_line (n || '' || i); - error - i: = 20; end loop; dbms_output.put_line (n); end;
Динамічна зміна кордонів
declare n number: = 3; begin for i in 1..n loop if n <10 then n: = n + 1; end if; dbms_output.put_line (i || '' || n); end loop; end;
Використання міток
begin << l1 >> for i in 1..3 loop for i in 5..6 loop dbms_output.put_line (l1.i || '' || i); end loop; end loop; end; begin << l1 >> for i in 1..3 loop for i in 5..6 loop dbms_output.put_line (l1.i || '' || i); exit l1 when i = 5; end loop; end loop; end; - goto declare n number; begin if n = null then dbms_output.put_line ( 'in if'); else goto met1; end if; dbms_output.put_line ( 'after if'); << met1 >> dbms_output.put_line ( 'after met1'); end; declare n number: = 1; begin for i in 1..10 loop if i = 5 then goto cont; end if; n: = n + 1; dbms_output.put_line (n); << cont >> null; end loop; end;
Основні об'єкти. Збережені процедури і функції
Процедура або функція - це підпрограма, що складається з SQL операторів і команд процедурного мови. Процедура і функція може:
- Утримувати параметри (аргументи);
- Викликати інші процедури;
- Повертати свій статус викликає процедурі або пакету, який вказує на успішне закінчення або помилку, і в разі помилки на її причину;
- Повертати значення параметрів викликає процедурі або пакету;
- Виконується завжди на стороні сервера.
- Функція крім того повертає результат через своє ім'я.
Збережені процедури і функції значно збільшують потужність, ефективність і гнучкість мови SQL і значно прискорюють виконання SQL-оператора і пакетів.
Збережені процедури здійснюються командою create procedure. Функції здійснюються командою - create function. Для виконання процедури, як системної, так і певної користувачем, використовується команда execute (виконати). Можна також просто вказати назву збереженої процедури, якщо воно є першим словом в операторі або пакеті.
Процедура або функція має дві частини:
- Специфікація, яка оголошує процедуру або функцію і складається з такої інформації:
- імені процедури
- Імен і типів даних аргументів, якщо є
- Крім цього, ТІЛЬКИ для функцій - типу даних повертається
- Тіло, яке визначає процедуру або функцію. Тіло процедури складається з блоку PL / SQL або T- SQL (який містить пропозиції SQL і процедурного розширення).
Основні об'єкти. тригери
Тригер - це процедура, що зберігається спеціального виду, яка запускається при виникненні якої-небудь події, зазвичай зміни даних в таблиці. Зокрема, тригери допомагають зберегти кількість посилань цілісність даних користувача, перевіряючи їх узгодженість в логічно зв'язаних таблицях. Основною перевагою тригерів є те, що вони викликаються автоматично. Вони будуть працювати незалежно від причини, яка викликала модифікацію даних, як, наприклад, після введення даних клерком, так і при виконанні деякої прикладної процедури. Тригер може бути пов'язаний з одним або більшою кількістю постачальників модифікації, такими як update, insert або delete.
Практичні заняття
Постановка задачі. Проектування даних на концептуальному і логічному рівнях. Нормалізація відносин.
Презентація по ER-моделювання
ER нотації
Приклад моделі в ERwin
Підготовка SQL скриптів генерації схеми відносин БД в ERwin. Розробка скрипта для введення тестової інформації.
Відео-презентація (Для програвання потрібно Windows Media Player)
Архітектура MS SQL Server 2005. Налагодження та використання основних компонент середовища. Створення навчальної бази даних.
Відео-презентація (Для програвання потрібно Windows Media Player)
Робота з СУБД MS SQL Server 2005, ORACLE 10g. Приклади з'єднань з БД, технології розробки кліенского додатки
Використання технології Java Database Connectivity (JDBC) для роботи з базами даних
презентація
Приклади до презентації
SQL-скрипти, проект і вихідні коди
package org.mai806.jdbcsample; import java.sql. *; public class QuerySample {public static void main (String [] args) throws Exception {/ * ======== Підключення до MS SQL Server ===== * / // Завантаження драйвера Class.forName ( "com. microsoft.sqlserver.jdbc.SQLServerDriver "); // З'єднання з базою даних Connection connection = DriverManager.getConnection ( "jdbc: sqlserver: // localhost: 1 433; databaseName = o01;", // localhost - сервер СУБД, o01 - ім'я бази даних "sa", "123") ; // користувач, пароль / * ======== Підключення до Oracle ============ // Завантаження драйвера Class.forName ( "oracle.jdbc.OracleDriver"); // З'єднання з базою даних Connection connection = DriverManager.getConnection ( "jdbc: oracle: thin: @localhost: 1 521: orcl", // localhost - сервер СУБД, orcl - SID бази оракла "o01", "o01"); // користувач, пароль // Створення Statement PreparedStatement stmt = connection.prepareStatement ( "select ID, NAME from PERSON where NAME like?"); stmt.setString (1, "% S%"); // Виконання запиту ResultSet rs = stmt.executeQuery (); // Перебір результату виконання запиту while (rs.next ()) {// Приклад вибору параметра за номером або по імені System.out.println ( "ID:" + rs.getLong (1) + "; NAME =" + rs .getString ( "NAME")); } // закриття використаних ресурсів БД rs.close (); stmt.close (); connection.close (); }} Лістинг P.1. Виконання запиту: QuerySample.java package org.mai806.jdbcsample; import java.sql. *; import java.util.ResourceBundle; public class StoredProcedureSample {private static Connection connection = null; public static void main (String [] args) throws Exception {// Отримання сполуки з значень параметрів у файлі properties ResourceBundle properties = ResourceBundle.getBundle ( "database"); Class.forName (properties.getString ( "driver")); connection = DriverManager.getConnection (properties.getString ( "url"), properties.getString ( "user"), properties.getString ( "password")); transferAmount (1,2,100.0); connection.close (); } / ** * Перекладає зазначену суму з одного рахунку на інший * @param from рахунок платника * @param to рахунок одержувача * @param amount сума * / public static void transferAmount (long from, long to, double amount) throws Exception {/ / Створення Statement CallableStatement stmt = connection.prepareCall ( "{call TransferAmount (?,?,?)}"); // Установка параметрів stmt.setLong (1, from); stmt.setLong (2, to); stmt.setDouble (3, amount); // Виконання процедури stmt.execute (); }} Лістинг P.2. Виконання процедури, що: StoredProcedureSample.java package org.mai806.jdbcsample; import java.sql. *; import java.util.ResourceBundle; public class TransactionalSample {private static Connection connection = null; public static void main (String [] args) throws Exception {// Отримання сполуки з значень параметрів у файлі properties ResourceBundle properties = ResourceBundle.getBundle ( "database"); Class.forName (properties.getString ( "driver")); connection = DriverManager.getConnection (properties.getString ( "url"), properties.getString ( "user"), properties.getString ( "password")); // Ручне управління транзакціями connection.setAutoCommit (false); try {transferAmount (2, 1, 10.0); } Finally {connection.close (); }} / ** * Перекладає зазначену суму з одного рахунку на інший * @param from рахунок платника * @param to рахунок одержувача * @param amount сума * / public static void transferAmount (long from, long to, double amount) throws Exception { PreparedStatement stmt = null; Statement query = null; try {stmt = connection.prepareStatement ( "update ACCOUNT set AMOUNT = AMOUNT +? where ID =?"); // Забираємо суму з рахунку платника stmt.setDouble (1, -amount); stmt.setLong (2, from); stmt.execute (); // Додаємо суму на рахунок одержувача stmt.setDouble (1, amount); stmt.setLong (2, to); stmt.execute (); // Пост-перевірка: негативність рахунку платника query = connection.createStatement (); ResultSet rs = query.executeQuery ( "select AMOUNT from ACCOUNT where ID =" + from + "and AMOUNT <0"); if (rs.next ()) {throw new Exception ( "На рахунку №" + from + "недосточності засобів [" + (amount + rs.getDouble (1)) + "] для зняття суми [" + amount + "]") ; } Connection.commit (); System.out.println ( "Перерахування коштів успішно виконано"); } Catch (Exception e) {e.printStackTrace (); connection.rollback (); } Finally {if (stmt! = Null) stmt.close (); if (query! = null) query.close (); }}} Лістинг P.3. Робота з транзакціями: TransactionalSample.java
Робота з базами даних з J2EE Web-контейнера
презентація
Об'єктно-реляційне відображення для роботи з базами даних
презентація
Використання препроцесора для роботи з API СУБД
презентація
Select ID, NAME from PERSON where NAME like?Update ACCOUNT set AMOUNT = AMOUNT +?
Where ID =?