В статье "Embedded SQL with Pro*C (http://www.oreillynet.com/pub/a/databases/2006/12/07/embedde...)" рассказывается о пре-компиляторе Pro*C, преобразующем исходные тексты с "Pro*C" вставками (по сути обычные SQL вставки) в нормальный Си/Си++ код.
Ниже наглядные примеры единого использования переменных и прямых
SQL запросов:
int a;
EXEC SQL SELECT salary INTO :a
FROM Employee
WHERE SSN=876543210;
printf("The salary is %d\n", a);int x; char *y; int z;
EXEC SQL INSERT INTO emp(empno, ename, deptno)
VALUES(:x, :y, :z);int emp_number[50];
char emp_name[50][11];
EXEC SQL INSERT INTO emp(emp_number, name)
VALUES (:emp_number, :emp_name);
URL:
Новость: http://www.opennet.me/opennews/art.shtml?num=9147
извращение еще то. Кого учили - не пользоваться макросами, а они...уф епть
Ну нафиг, зачем это нужно если можно все сделать наглядней без этого извращения ?
Ужас. Я думал что ESQL закопали и надпись на камне написали, а оно еще барахтается...
А можно факты - чем такой подход плох?
> А можно факты - чем такой подход плох?Да собственно... можно бифштекс покрошить в борщ, туда же вывалить салат и слить компот, а потом через край тарелки это выхлебать... Цель достигнута - запас калорий в организме пополнен :)
Я факты просил, а не ваши упражнения в красноречии.
> Я факты просил, а не ваши упражнения в красноречии.Nedostatok ispolzovanija Embedded SQL: SQL cod vinesen za predeli basi dannix. Embedded SQL bil sozdan v to vrema (i dla togo vremeni) kogda nebilo hranimix procedur.
> Nedostatok ispolzovanija Embedded SQL: SQL cod vinesen za predeli basi dannix. Embedded SQL bil sozdan v to vrema (i dla togo vremeni) kogda nebilo hranimix procedur.+1.
Ибо в нормально спроектированном приложении есть набор объектов-оберток над хранимыми процедурами, где всё препарится и компилится на серваке. А остальной код приложения работает с этими обертками, причем за счет серверной компиляции максимально эффективным образом.
Разбросанные тут и там по коду куски ESQL можно терпеть максимум в приложении у которого 2 таблички на mysql живут, далее это превратится в нечто монстроидальное и трудноуправляемое.
Впрочем, отдельные умельцы по 15000 строк в void main(){} запхнуть умудряются... им не привыкать...
> Впрочем, отдельные умельцы по 15000 строк в void main(){} запхнуть умудряются... им не привыкать...Это вы о mplayer? ;)
есть же обёртки над sql не на sql а уже на прикладном ЯП.
вот для них же.
это не то же самое что и код sql пополам с Си в разных частях приложения.
Факты? Я пробовал пополнять калории описанным способом. Отказать.
А чем плохо ? Однажды уже было, никому не мешало. Ежедневную одноразовую горбуху на пару запросов скодить - самое то. А с дуру можно ясный день и член сломать... Каждой задаче - свой инструмент.
Небольшие утилиты писать - самое то. Будет быстро и понятно. Вместо огорода ADO или ODBC.
небольшие утилиты писать - самое то на perl или того проще - на *sh, а такие извраты - ф топку.
А что, сложно API соответствующей БД юзать? Там же тоже просто запросы будут, просто в сответствующей функции. А то учим Си, потом учим ESQL потом пишем, потом думаем где напароли. Все едино после прогона через препроцессор будет код для конкретной БД по идее.А ADO или ODBC эт для ситуации когда БД непонятно какую юзать надо... ИМХО.
Основной плюс - это возможность делать проверки SQL-кода до компиляции.Ясное дело, что есть минусы. Но вот этот плюс, на мой взгляд, даёт право на жизнь данному подходу. Это подтверждается тем, что "встроенный SQL" описан и в тексте стандартов (в какой-то из его частей).
>Основной плюс - это возможность делать проверки SQL-кода до компиляции.
>
>Ясное дело, что есть минусы. Но вот этот плюс, на мой взгляд,
>даёт право на жизнь данному подходу. Это подтверждается тем, что "встроенный
>SQL" описан и в тексте стандартов (в какой-то из его частей).
>
проверки sql-кода сишным компилером... эхехе, а если я элементарно в имени поля буковку попутаю - это как, отдетектится? :)
этот Pro*C гыдота та ещё. что более-менее простое на нём налабать можно, но не более. в своё время поковырял его и перешёл на OTL, коим остался вполне доволен.