Документація Reportizer
Contents Index

Використання SQL-запитів

Початок Попередній Наступний

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

Написати запит ви можете як при створенні звіту, так і під час його редагування (на сторінці Джерело даних).

Слід писати запити по тим правилам, які визначені для відкритої бази даних: наприклад, якщо відкрито базу даних Oracle, пишіть запит по правилам Oracle, і т.д.

SQL-редактор та підсвітка синтаксису

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

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

SQL-редактор і підсвітка синтаксису

Текст запиту можна ввести з клавіатури або завантажити з файлу (за допомогою відповідної кнопки або простим перетягуванням потрібного файлу з Провідника). Введений SQL-текст можна зберегти в файлі або надрукувати.

SQL-редактор підтримує підсвітку SQL-синтаксису. Використовуйте Опції | Опції редактора... для зміни параметрів підсвітки синтаксису. При друкуванні SQL-тексту зберігаються кольори та синтаксична підсвітка.

Динамічне доповнення коду SQL допомагає при написанні запитів до бази даних:

Доповнення коду в редакторі SQL

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

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

SELECT c.custno, o.orderdate
FROM ":CustDSN:customer" c, ":OrderAlias:order" o
WHERE ...

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

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

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

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

Параметри в SQL

Параметри починаються з двокрапки. Параметри, що містять пробіли, повинні братися в одинарні лапки. Параметричні запити зручні тим, що один і той же 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

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

SELECT *
FROM payments
WHERE customertype in (<<CUST_TYPE_LIST>>)

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

3, 8, 12, 5

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

Див. також:

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

 Запуск з командного рядка

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

 Джерела даних для звітів