Як працює інструмент запитів

Вікна запитів SQL

SQL-редактор

Виконання запитів

Серверний вивід

Запуск скриптів з багатьма командами SQL

Асинхронне виконання запитів SQL

Запити з параметрами та макросами

Первинне джерело даних

Запити до кількох баз даних

Як працює інструмент запитів

Як і більшість інструментів баз даних, Database Tour не виконує ваші запити до баз даних безпосередньо. Він робить базові перевірки запиту, після чого передає його на виконання вашому серверу баз даних або движку баз даних (FD, ADO і т.д.). Тому слід писати запити по тим правилам, які визначені для відкритої бази даних: наприклад, якщо відкрито базу даних Oracle, пишіть запит по правилам Oracle, і т.д.

Даний розділ описує загальну техніку та специфічні можливості Database Tour, що допомагають вам будувати ваші запити і отримувати їх результати. Ви не знайдете тут підручника по SQL, хоча б тому, що фізично неможливо знати всі нюанси мови SQL для всіх існуючих в світі типів баз даних. Для отримання більше інформації щодо написання SQL-запитів, будь-ласка, читайте документацію по вашій базі даних.

Вікна запитів SQL

Для створення нового вікна SQL клацніть кнопку Нове вікно SQL , виберіть меню Запит | Створити... або натисніть Ctrl+Q. Ви можете створювати будь-яку кількість вікон SQL для кожної бази даних (ви обмежені лише оперативною пам'яттю та розміром екрану).

У вікні SQL є кілька закладок:

Вікно запиту SQL

SQL-редактор

Текст запиту (SQL текст) вводиться на закладці Редагування. Його можна ввести з клавіатури або завантажити з файлу (в т.ч. і з командного рядка). Є кілька шаблонів найчастіше використовуваних SQL-виразів, які доступні по натисненню кнопки Шаблони; виберіть шаблон і потім просто відредагуйте SQL-текст, що з'явився, для отримання потрібного SQL-виразу.

На панелі інструментів редактора та в контекстному меню редактора є багато функцій, що полегшують редагування та форматування тексту SQL.

Рядок стану внизу показує позицію курсора (лінію та колонку) і розмір виділеного тексту (якщо є).

Підсвітка синтаксису

SQL-редактор підтримує підсвітку SQL-синтаксису. Використовуйте меню Опції | Середовище | SQL редактор | Шрифт і колір для зміни параметрів підсвітки синтаксису.

В доповнення до цього, є можливість вказати SQL-діалект для підсвітки синтаксису. Різні SQL-діалекти зазвичай призначені для використання з різними типами баз даних та мають різні набори ключових слів і деяких інших опцій, котрі можуть змінити підсвітку синтаксису для деяких елементів вашого SQL-коду. В більшості випадків SQL-діалект підбирається автоматично в залежності від типу відкритої бази даних (напр., dBase, Oracle, SQL Server). Але в деяких випадках вам, можливо, знадобиться змінити його на більш підходящий (напр., змінити SQL-діалект для вашої бази даних типу SQL Server з MS SQL 7 на MS SQL 2K і навпаки); це можна зробити в меню Запит. Враховуйте, що SQL-діалект, як і сама підсвітка синтаксису, ніяк не впливає на виконання запитів, і використовується тільки для зручності перегляду SQL-коду.

Підсвітка синтаксису SQL

При друкуванні SQL-тексту або його збереженні в форматах RTF або HTML, зберігаються кольори та синтаксична підсвітка.

Гіперлінки

Якщо натиснути і утримувати Ctrl і при цьому вести мишу над текстом SQL, Database Tour намагається аналізувати слова під мишею. Якщо слово під мишею розпізнано як спеціальний об'єкт, який програма може обробити у поточному контексті, воно перетворюється на гіперлінк. Якщо його клікнути, програма виконає над цим об'єктом певну дію:

Ви можете налаштовувати використання гіперлінків в коді SQL за допомогою відповідних опцій of Редактора SQL.

Підказки до слів SQL

Якщо повільно провести мишкою над текстом SQL, Database Tour може показати вам деяку інформацію про слово під мишею, наприклад, якщо слово є табличним аліасом або змінною в збереженій процедурі.

Підказка для змінної в процедурі показує тип і значення за умовчанням для змінної:

Підказка для змінної в процедурі

Підказка для табличного аліасу показує повну назву використаної таблиці бази даних:

Підказка для аліасу таблиці

Ви можете налаштовувати використання підказок для слів SQL за допомогою відповідних опцій of Редактора SQL.

Виконання запитів

Для виконання SQL-виразу з SQL-редактору клацніть кнопку Виконати Кнопка Виконати. У випадаючому списку цієї кнопки ви можете вибрати деякі додаткові дії.

Зауваження: якщо в SQL-редакторі є виділений фрагмент тексту, то лише виділені вирази будуть виконані.

В разі, якщо виконано запит на вибірку даних (запит типу SELECT), результуючі дані з'являться на закладці Результат (або під текстом запиту, в залежності від відповідної опції). Для роботи з цими даними призначені деякі елементи меню з розділом Інструменти або кнопки головної панелі інструментів (якщо ви на закладці Результат). Наприклад, їх (дані) можна експортувати, побудувати звіт, роздрукувати дані “як є” і т.д.

Якщо потрібно швидко побудувати запит для вибірки даних з однієї таблиці, можна просто вибрати елемент Згенерувати SQL | Вибірка даних... з контекстного меню потрібної таблиці в списку таблиць.

Редагування даних запитів типу SELECT

Більшість баз даних дозволяють редагувати дані запитів на вибірку, якщо тип виборки даних дозволяє це робити (наприклад, якщо в запиті ви отримуєте дані тільки з однієї таблиці, не використовуєте агрегатних функцій тощо). Додатково для можливості редагування запитів використовуйте опцію 'Живі' запити.

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

Історія виконаних запитів і навігація між ними

Програма зберігає SQL тексти виконаних запитів (їх кількість залежить від відповідної опції), а також деяку статистичну інформацію про вже виконані запити, для кожної БД. Ця інформація знаходиться на закладці Історія відповідного вікна SQL. Її можна скопіювати в буфер (і автоматично створити багатозапитний скрипт). Для обміну текстами запитів різних БД використовуйте кнопки Експортувати SQL-історію / Завантажити SQL-історію. Для швидкого перенесення текстів запитів однієї БД до іншої відкрийте першу БД, станьте на закладку Історія та переключіться на другу БД, утримуючи SHIFT. Для навігації між збереженими текстами запитів служать кнопки Попередній SQL, Наступний SQL на закладці Редагування або подвійний клік відповідного запису в історії.

Історія з усіх вікон SQL всіх зареєстрованих у програмі баз даних баз даних записується в файл робочої області (повний шлях до файлу можна побачити з меню База | Зареєстровані бази даних...). Запис в файл відбувається в таких випадках: перед виконанням запиту, при закритті бази даних, при закритті програми. Врахуйте це, якщо працюєте з багатьма копіями програми одночасно. При перевідкритті програми всі історії всіх вікон SQL всіх баз даних даних завантажуються з файлу робочої області в оперативну пам'ять; потім при відкритті бази даних всі вікна SQL цієї бази даних відновлюються.

Виконання запитів по таймеру

Є можливість виконувати запит по таймеру. Використовуйте для цього кнопку Виконати по таймеру Кнопка Виконати по таймеру. Якщо клікнути цю кнопку, Database Tour повторює виконання запиту по таймеру. Це може бути корисним, наприклад, для моніторингу даних або логів, що часто змінюються, або в тестових цілях. У випадаючому списку цієї кнопки ви можете змінити відповідні опції типу інтервалу таймера і т.д. Для зупинки циклу виконання просто клікніть кнопку знову для відновлення її ненатиснутого стану.

Серверний вивід

На закладці Вивід можна бачити серверний вивід, згенерований під час виконання запиту (для баз даних Oracle і PostgreSQL, відкритих інтерфейсом FD). Цей вивід можна використовувати для налагодження ваших збережених процедур або для контролю за їх виконанням.

Для баз даних Oracle це відгук, надісланий з використанням пакета DBMS_OUTPUT.

Для баз даних PostgreSQL це можуть бути помилки, попередження, підказки від PostgreSQL, або відгук, надісланий, наприклад, командами RAISE NOTICE.

Приклад серверного виводу в базі даних PostgreSQL:

Перегляд серверного виводу

Запуск скриптів з багатьма командами SQL

В програмі можливо виконання багатокомандних SQL-скриптів (сценаріїв). Між запитами скрипта повинен стояти розділювач (термінатор): один або кілька символів (без пробілів), який задається на рівні підключення до бази даних.

Тип бази даних Розділювач команд SQL за замовчанням
Interbase Символ каретки (^)
Firebird Символ каретки (^)
Oracle

Комбінація крапки з комою (;) та розділювача в стилі SQL Plus (коса риска (/) на початку наступного після команди рядка; для вказання такого розділювача у властивостях бази даних, використовуйте макрос <sqlplus>).

Якщо використовуєте значення по замовчанням, рекомендується використовувати розділювач в стилі SQL Plus для розмежування блоків PL/SQL (де крапка з комою є елементом мови програмування), a крапку з комою у звичайному SQL.

SQL Server

Слово GO на початку наступного після команди рядка; для вказання такого розділювача у властивостях бази даних, використовуйте макрос <mssqlgo>.

Інші Крапка з комою (;)

Виконання багатокомандного скрипта SQL:

Виконання багатокомандного скрипта SQL

Для зміни розділювача команд SQL для певної бази даних переконайтеся, що ця база закрита, потім виберіть меню База | Зареєстровані бази даних..., в списку виберіть потрібну базу даних, клацніть кнопку Редагувати, знайдіть властивість Розділювач виразів SQL, змініть її значення на потрібне, і клацніть Застосувати зміни.

Є також просунутий спосіб виконання багатокомандних SQL-скриптів за допомогою випадаючого меню біля кнопки Виконати, де можливо задати файл журналу для збереження інформації про результат виконання кожної команди SQL. Увага! В цьому режимі, якщо при виконанні якоїсь команди скрипта сталася помилка, виконання не зупиняється, а продовжується з наступної команди.

Після того, як виконання скрипта закінчиться, ви можете перемкнутися на закладку Історія і переглянути детальну статистику щодо кожної виконаної команди на панелі внизу закладки. Якщо двічі клацнути на номері рядка певної команди (перша колонка), вас швидко перенесе до відповідного рядка редактора SQL.

Асинхронне виконання запитів SQL

Асинхронне виконання означає можливість роботи більше ніж одного запиту одночасно (з різних вікон SQL) або робота з інтерфейсом програми під час виконання запиту (запитів). Ця можливість вмикається відповідною опцією з секції Бази даних.

Майте на увазі, що не всі бази даних дозволяють виконувати запити паралельно. Якщо ваша база даних не підтримує це, ви все одно зможете запустити кілька запитів SQL на виконання в один і той же час і при цьому працювати з інтерфейсом Database Tour, але база даних буде виконувати ваші запити послідовно.

Асинхронне виконання запитів в базі даних PostgreSQL:

Asynchronous query execution

Тут ми працюємо з текстом запиту у вікні SQL 1, а в цей час чотири інших вікна виконують свої запити.
Один з цих запитів вже успішно завершився, ще один завершився з помилкою, а ще два продовжують виконання.

Запити з параметрами та макросами

Параметри та макроси є свого роду змінними в SQL-тексті. Вони збільшують гнучкість при виконанні запитів, дозволяючи (без зміни тексту) змінювати запит безпосередньо перед його виконанням. Вони отримують значення безпосередньо перед виконанням запиту або від користувача, або через параметри командного рядка, або зі звіту (якщо запит відкривається зі звіту), або ж можуть бути вираховані автоматично, якщо вони є наперед визначеними (див. нижче). Макроси - це завжди текстові змінні; вони замінюються в SQL-тексті своїми значеннями перед виконанням запиту. На відміну від макросів, параметри мають тип; їх значення і типи передаються серверу, а не вставляються в SQL-текст. Макроси і параметри всередині коментарів і рядкових літералів ігноруються програмою, але все-таки не рекомендується включення параметрів всередині коментарів, особливо для підключень ADO. Хоча іноді макроси зручніші від параметрів, використання параметрів має певні переваги, як з точки зору протидії SQL injection, так і оптимізації виконання запиту.

Якщо параметр чи макрос не є наперед визначеним і не заданий в командному рядку або звіті, то програма пропонує користувачу ввести значення в окремому вікні.

Макроси починаються з << і закінчуються >>. Їх головне призначення: динамічна заміна при виконнані запиту з командного рядка. Текст макросу може містити тільки букви, цифри і знак підкреслювання. Наступний SQL приклад містить макрос CUST_TYPE_LIST:

SELECT * FROM payments

WHERE customertype in (<<CUST_TYPE_LIST>>)

Значенням для такого макросу може бути, наприклад, такий текст:

3, 8, 12, 5

Зауважте, що подібний результат неможливо отримати з використанням параметрів.

Параметри починаються з двокрапки. Параметри, що містять пробіли, повинні братися в одинарні лапки. Параметричні запити зручні тим, що один і той же SQL-вираз можна використовувати для різних даних, які будуть підставлятися тільки на етапі виконання. Наступний SQL приклад містить параметр DATE:

SELECT * FROM payments

WHERE paydate = :DATE

При виконанні такого запиту програма пропонує ввести значення параметру і його тип даних, після чого продовжує виконання. Для зручності вводу параметрів, щоб тип даних параметру вибирався автоматично, достатньо в SQL-виразі відразу за параметром в окремому коментарі вказати тип параметра, як в наступному прикладі:

SELECT * FROM orders

WHERE orderno < :ORDERNO /* ParamType=Integer */

Є кілька наперед визначених параметрів, які заповнюються програмою автоматично:

<<SYSTEM_DATE>>Заміняються поточною датою (з типом Date)
<<SYSTEM_DATETIME>>Заміняються поточними датою і часом (з типом DateTime)
<<SYSTEM_TIME>>Заміняються поточним часом (з типом DateTime)
<<SYSTEM_YEAR>>Заміняються поточним роком (з типом Integer)
<<SYSTEM_MONTH>>Заміняються поточним місяцем (з типом Integer)
<<SYSTEM_DAY>>Заміняються поточним днем (з типом Integer)

Якщо наперед визначений параметр починається не з двокрапки, то він інтерпретується як наперед визначений макрос. У випадку цілочисельних даних результат буде одинаковий, але для інших типів даних можуть бути проблеми, тому краще не плутати макроси та параметри.

Первинне джерело даних

В запитах можна використовувати первинне джерело даних. Принцип такий: якщо поставити в SQL-тексті двокрапку і відразу за нею назву поля з первинного джерела (таблиця, що відкрита в окремому вікні), то це буде сприйнято як параметр, що дорівнює значенню відповідного поля в первинному джерелі даних.

Приклад (таблиця 1 використовується для виборки даних, таблиця 2 - як первинне джерело, поле 1 - поле з таблиці 1):

SELECT * FROM <назва таблиці 1>

WHERE <назва поля 1> = :CUSTOMER

Зі списку таблиць виберіть таблицю-джерело (таблиця 2) і відкрийте її в окремому вікні (для цього клацніть на таблиці правою кнопкою миші і виберіть відповідний пункт меню). Поле CUSTOMER повинно бути в цій таблиці, інакше ви отримаєте повідомлення про помилку. Потім клацніть кнопку З первинним джерелом (на закладці Результат) і відкрийте запит. В результаті ви отримаєте набір записів з таблиці 1, в якому значення поля 1 дорівнює значенню поля CUSTOMER з таблиці 2. При переході на інший запис таблиці 2 запит автоматично перевідкриється, підлаштовуючись під нове значення поля CUSTOMER.

Запити до кількох баз даних одночасно

З локальних баз даних є можливість будувати запити типу SELECT, які б посилалися на таблиці з зовнішньої бази даних (тільки для підключень BDE). Більше того, можна зв'язувати таблиці кількох баз даних одночасно. Локальна база даних - це база з таблицями Paradox, dBase або FoxPro, відкрита через аліас BDE або через назву теки. Зовнішньою базою може бути посилання на теку (для локальних таблиць), джерело даних ODBC або аліас BDE. Щоб послатися на таблицю із зовнішньої бази, перед назвою таблиці напишіть двокрапку, назву бази, та ще одну двокрапку, і всю конструкцію візьміть в лапки, наприклад:

SELECT c.custno, o.orderdate

FROM ":CustDSN:customer" c, ":OrderAlias:order" o

WHERE ...

Див. також:

 Приклади запитів

 Параметри запуску Database Tour

 Робота з даними таблиць і запитів

 Гарячі клавіші редактора SQL тексту