Существует ли более интеллектуальный sql-препроцессор для Oracle, чем Pro * C / C ++? - PullRequest
4 голосов
/ 03 апреля 2012

Кто-нибудь знает, есть ли препроцессор для C / C ++ в сочетании с Oracle, который позволил бы мне написать C или C ++ код, подобный:

void populateTableList(GuiList* tableList) {

     for users in ( select table_name, 
                           owner, 
                           tablespace_name
                      from dba_tables) 
     {
         tableList -> addRow(
                         users.table_name, 
                         users.owner, 
                         users.tablespace_name);
     }
 }

Основные функции, которые я ищу,

  • квазиавтоматическое объявление / определение выбранных значений (здесь: users.table_name, users.owner и users.tablespace_name) аналогичныена PL/SQL for loop statement и

  • автоматический механизм выборки до завершения (без явного вызова процедуры stmt.fetch() или чего-то еще) и

  • проверка правильности оператора SQL во время компиляции.

Есть ли такая вещь?

1 Ответ

1 голос
/ 13 апреля 2012

Согласно следующим 9, 10, 11 страницам нет другого «прекомпилятора» C / C ++, кроме PRO * C / C ++.Существует интерфейс языка программирования C / C ++, называемый OCI / OCCI, но технически это не прекомпилятор

На этой странице указано, что «программы OCI не прекомпилированы»:

http://www.orafaq.com/wiki/Oracle_Call_Interfaces

Эти страницыПеречислите доступные инструменты компилятора C / C ++: * Страница прекомпилятора

9I: http://docs.oracle.com/html/A97297_01/ch4_comp.htm

This page lists PRO*C/C++, 
and the Non C precompilers: PRO*COBOL, PRO*FORTRAN,
SQL for ADA, the OCI

Страница прекомпилятора 10G: См. номер детали B25416-02 (на этой странице нет других CПрекомпиляторы / C ++ еще не перечислены)

9I до 11 примечаний к прекомпилятору: https://blogs.oracle.com/db/entry/master_note_for_precompilers_oci_and_occi

(This page Does not list any other C/C++ precompilers not
already listed)

Задайте сравнение Tom OCI / PRO * C: http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:999630650601

This page shows an example that has an SQL statement with
invalid syntax being passed to OCI, through OCIStmtPrepare()
and the compile does not error.  This means that 
at the time of the OCI compile a complete syntax check
of the SQL statement is not done which is 
consistent with what I have seen.

На этой странице указано «Поддержка OCI и прекомпиляторов для (..)», подразумевая, что OCI не выполняет прекомпиляцию:

http://www.oracle.com/technetwork/database/features/oci/index.html

Похоже, в коде, в который встроен SQL.Чтобы проверить этот код на достоверность во время компиляции, потребуется прекомпилятор, который имеет доступ к словарю данных (я знаю, что PRO * C делает с другим синтаксисом, чем тот, который у вас есть, но ни один из других поддерживаемых ORACLE инструментов для C / C ++, перечисленных ввышеуказанные страницы делают).

...