Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Attaquer une base Oracle depuis un programme C

9 réponses
Avatar
vigi98
Bonjour,

Tout est dans le titre.

Il me paraissait évident qu'on pouvait faire des requêtes Oracle
depuis un programme en C, mais après recherches, cela me paraît
beaucoup moins évident. On parle beaucoup de proC, mais si je ne
m'abuse, cela implique que le programme soit inclus au serveur Oracle.
Or ça ne correspond pas à mon besoin.

N'y a-t-il pas quelque part sur le net une librairie C qui permet de
causer avec Oracle ?

Merci de m'aider.

9 réponses

Avatar
Targeur fou
vigi98 wrote:
Bonjour,


Bonjour,


Tout est dans le titre.

Il me paraissait évident qu'on pouvait faire des requêtes Oracle
depuis un programme en C, mais après recherches, cela me paraît
beaucoup moins évident. On parle beaucoup de proC, mais si je ne
m'abuse, cela implique que le programme soit inclus au serveur
Oracle.


?? ("inclus au serveur Oracle"), tu as besoin du précompilateur Pro*C
(et des bibliothèques Oracle) qui interprète les instructions SQL
embarquées dans le programme pour générer un *.c qui appelle ensuite
les fonctions de la bibliothèque Oracle à l'exécution. Il faut bien
évidemment avoir les outils de dev. Oracle mais je ne comprend pas ce
que tu entends par "inclusion du programme au serveur".

http://www-db.stanford.edu/~ullman/fcdb/oracle/or-proc.html#overview

Or ça ne correspond pas à mon besoin.


Pourquoi, quel est le problème ?


N'y a-t-il pas quelque part sur le net une librairie C qui permet de
causer avec Oracle ?


L'interface d'appel Oracle, OCI.

http://www.csee.umbc.edu/help/oracle8/server.815/a67846/toc.htm

Regis

Avatar
vigi98
"Targeur fou" a écrit dans le message de news:


vigi98 wrote:
Bonjour,


Bonjour,


Tout est dans le titre.

Il me paraissait évident qu'on pouvait faire des requêtes Oracle
depuis un programme en C, mais après recherches, cela me paraît
beaucoup moins évident. On parle beaucoup de proC, mais si je ne
m'abuse, cela implique que le programme soit inclus au serveur
Oracle.


?? ("inclus au serveur Oracle"), tu as besoin du précompilateur Pro*C
(et des bibliothèques Oracle) qui interprète les instructions SQL
embarquées dans le programme pour générer un *.c qui appelle ensuite
les fonctions de la bibliothèque Oracle à l'exécution. Il faut bien
évidemment avoir les outils de dev. Oracle mais je ne comprend pas ce
que tu entends par "inclusion du programme au serveur".

http://www-db.stanford.edu/~ullman/fcdb/oracle/or-proc.html#overview

Or ça ne correspond pas à mon besoin.


Pourquoi, quel est le problème ?


N'y a-t-il pas quelque part sur le net une librairie C qui permet de
causer avec Oracle ?


L'interface d'appel Oracle, OCI.

http://www.csee.umbc.edu/help/oracle8/server.815/a67846/toc.htm

Regis

Ben merci, l'OCI me paraît parfait. En ce qui concerne le proC, par
"inclusion du programme au serveur" j'entendais que ton code est contenu par
le serveur, au même titre que du code PL/SQL par exemple, ou bien que les
bouts de code java que tu peux maintenant mettre dans ta base. As-tu mieux
compris et si oui, suis-je dans le vrai ? Sinon, quel est l'intérêt de faire
du proC plutôt que de C ?

Avatar
Jean-Marc
"vigi98" a écrit dans le message de
news:422cb17c$0$29948$

"Targeur fou" a écrit dans le message de news:


vigi98 wrote:
Bonjour,


Bonjour,


Tout est dans le titre.

Il me paraissait évident qu'on pouvait faire des requêtes Oracle
depuis un programme en C, mais après recherches, cela me paraît
beaucoup moins évident. On parle beaucoup de proC, mais si je ne
m'abuse, cela implique que le programme soit inclus au serveur
Oracle.


?? ("inclus au serveur Oracle"), tu as besoin du précompilateur Pro*C
(et des bibliothèques Oracle) qui interprète les instructions SQL
embarquées dans le programme pour générer un *.c qui appelle ensuite
les fonctions de la bibliothèque Oracle à l'exécution. Il faut bien
évidemment avoir les outils de dev. Oracle mais je ne comprend pas ce
que tu entends par "inclusion du programme au serveur".

http://www-db.stanford.edu/~ullman/fcdb/oracle/or-proc.html#overview

Or ça ne correspond pas à mon besoin.


Pourquoi, quel est le problème ?


N'y a-t-il pas quelque part sur le net une librairie C qui permet de
causer avec Oracle ?


L'interface d'appel Oracle, OCI.

http://www.csee.umbc.edu/help/oracle8/server.815/a67846/toc.htm

Regis

Ben merci, l'OCI me paraît parfait. En ce qui concerne le proC, par
"inclusion du programme au serveur" j'entendais que ton code est contenu
par

le serveur, au même titre que du code PL/SQL par exemple, ou bien que les
bouts de code java que tu peux maintenant mettre dans ta base. As-tu mieux
compris et si oui, suis-je dans le vrai ? Sinon, quel est l'intérêt de
faire

du proC plutôt que de C ?


le code proC est plus agréable que de manipuler directement SQL depuis le
C. La façon d'écrire les statements, les PREPARE etc est plus conviviale.
Cependant, tu le paies par l'obligation de préprocesser tes fichiers C.

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."


Avatar
cedric
vigi98 wrote:

On parle beaucoup de proC, mais si je ne
m'abuse, cela implique que le programme soit inclus au serveur Oracle.


Si ma mémoire est bonne, non. Ton programme peut se connecter à une base
distante. Il faut bien sur les que les librairies oracle soient
présentent ou linkées statiquement.

Pour avoir une réponse sur, il faut demander sur un newsgroup consacré à
Oracle ou, à défaut, un comp.databases.qqchose...

Avatar
Trognon Patrice
vigi98 wrote:

Bonjour,

Tout est dans le titre.

Il me paraissait évident qu'on pouvait faire des requêtes Oracle
depuis un programme en C, mais après recherches, cela me paraît
beaucoup moins évident. On parle beaucoup de proC, mais si je ne
m'abuse, cela implique que le programme soit inclus au serveur Oracle.
Or ça ne correspond pas à mon besoin.

N'y a-t-il pas quelque part sur le net une librairie C qui permet de
causer avec Oracle ?

Merci de m'aider.


Tu as différentes solutions, soit le Pro*C ou encore les OCI
qui ont été evoquées dans ton thread, mais tu peux aussi
le faire par ODBC.

Le Pro*C tu vas intégrer des instructions Pro*C dans ton code C,
ce code Pro*C sera traité par un précompilateur Pro*C qui va
générer le code C correspondant, puis il te reste à compiler
ton code C et le linker avec les librairies d'Oracle, à savoir
les OCI.

Les OCI c'est un peu plus compliqué à coder, surtout depuis
la version 8 ou ca c'est quelque peu corsé.
Si tu choisis cette solution je te conseille fortement de
commencer par te développer ta propre API permettant
d'ouvrir une connection sur oracle, la fermer, ouvrir
un curseur, en effectuer le bind des variable en entrée
(bind-in), exécuter ton curseur, donc effecteur le bind
des données en sortie (bind-out), executer une requete directe
(insert update delete, create ..).
Une fois que tu as développé cela, tu peux alors écrire
ton code qui va s'appuyer sur ton API pour communiquer
avec Oracle.

ODBC, c'est aussi une API, plus simple que les OCI, l'avantage
étant que ton code basé sur ODBC va pouvoir se connecter
aussi bien a un Oracle qu'a une autre base de données.
Les API ODBC sont pas super super simple, mais c'est surmontable.
tu en as une implémentation sur Windows, il en existe aussi
des implémentation sur Linux (et autre Unix).

Voila, perso je ne suis pas un super grand copain du Pro*C,
car les precompilos qui generent du code a ma place j'aime
pas trop :(.

Je te conseille donc de faire soit la solution par ODBC,
soit pas le Pro*C si tu aimes ca.
Et enfin si tu te sens en forme, attaque les OCI, c'est clair
que c'est le mieux, mais ce n'est pas la plus simple.

Pour savoir comment compiler et linker ton code avec le Pro*C
ou avec les OCI tu vas dans les repertoires d'exemples
d'Oracle, et tu lances la compilation de leurs samples de code.
La tu vas avoir les bonnes options de compilation et les
bonnes options de linkage surtout, il te reste a faire pareil
dans ton Makefile (enfin si t'es sous linux/Unix).
Sur windows je ne sais pas, mais il doit bien y avoir
aussi des samples avec les fichiers projet.

Voila, hésite pas si tu as besoin d'aide supplémentaire.

--
Cordialement,

Patrice Trognon
http://www.javadevel.com

Avatar
Thomas Labourdette
vigi98 a écrit le Lundi 07 Mars 2005 20:54 :

Ben merci, l'OCI me paraît parfait. En ce qui concerne le proC, par
"inclusion du programme au serveur" j'entendais que ton code est contenu
par le serveur, au même titre que du code PL/SQL par exemple, ou bien que
les bouts de code java que tu peux maintenant mettre dans ta base. As-tu
mieux compris et si oui, suis-je dans le vrai ?


Non.

Sinon, quel est l'intérêt de faire du proC plutôt que de C ?


De simplifier l'accès a l'API Oracle.

@+
--
Rocky LAILAI (signature aléatoire)
"Jusqu'ou les chauves se lavent-ils le visage?"

Avatar
Targeur fou
vigi98 wrote:

Bonjour,

"Targeur fou" a écrit dans le message de news:


vigi98 wrote:
Bonjour,


Bonjour,


Tout est dans le titre.

Il me paraissait évident qu'on pouvait faire des requêtes Oracle
depuis un programme en C, mais après recherches, cela me paraît
beaucoup moins évident. On parle beaucoup de proC, mais si je ne
m'abuse, cela implique que le programme soit inclus au serveur
Oracle.


?? ("inclus au serveur Oracle"), tu as besoin du précompilateur
Pro*C

(et des bibliothèques Oracle) qui interprète les instructions SQL
embarquées dans le programme pour générer un *.c qui appelle
ensuite

les fonctions de la bibliothèque Oracle à l'exécution. Il faut
bien

évidemment avoir les outils de dev. Oracle mais je ne comprend pas
ce

que tu entends par "inclusion du programme au serveur".

http://www-db.stanford.edu/~ullman/fcdb/oracle/or-proc.html#overview

Or ça ne correspond pas à mon besoin.


Pourquoi, quel est le problème ?


N'y a-t-il pas quelque part sur le net une librairie C qui permet
de


causer avec Oracle ?


L'interface d'appel Oracle, OCI.

http://www.csee.umbc.edu/help/oracle8/server.815/a67846/toc.htm

Regis

Ben merci, l'OCI me paraît parfait. En ce qui concerne le proC, par
"inclusion du programme au serveur" j'entendais que ton code est
contenu par

le serveur, au même titre que du code PL/SQL par exemple, ou bien
que les

bouts de code java que tu peux maintenant mettre dans ta base. As-tu
mieux

compris et si oui, suis-je dans le vrai ? Sinon, quel est l'intérêt
de faire

du proC plutôt que de C ?


Tu parles de procédures stockées. Le code contenu au niveau du
serveur dans la base même et qu'Oracle est capable de traiter
directement pour réaliser de petites tâches constitue ce que l'on
appelle des procédures stockées. Je sais que c'est faisable en PL/SQL
(normal, un "code natif") et en Java (par l'intermédiaire d'un JRE
quelconque) mais en C, je ne suis pas sûr pour Oracle (DB2 oui).

Le Pro*C est différent, il te permet d'utiliser les bibliothèques
Oracle à l'exécution comme OCI, à la différence que le Pro*C
nécessite une étape de précompilation (conversion pc -> c). Le but,
comme OCI, c'est de simplifier l'utilisation de SQL au sein de ton
programme.

Regis


Avatar
Trognon Patrice
Targeur fou wrote:


[...clip]


Tu parles de procédures stockées. Le code contenu au niveau du
serveur dans la base même et qu'Oracle est capable de traiter
directement pour réaliser de petites tâches constitue ce que l'on
appelle des procédures stockées. Je sais que c'est faisable en PL/SQL
(normal, un "code natif") et en Java (par l'intermédiaire d'un JRE
quelconque) mais en C, je ne suis pas sûr pour Oracle (DB2 oui).

[...clip]


interessant ca, tu peux développer des procédures stockées en C
sur DB2, c'est possible en PostgreSQL je savais pas que DB2 le faisait
aussi ?

Comment ils gerent les problèmes de secu, je veux dire le code
de la procsto développée en C s'execute bien sur avec les droits
de la base de données (niveau processus je parle) donc comment
empecher que ce code n'effectue des opérations un peu légères
(open de fichiers de la base, etc etc) ?

--
Cordialement,

Patrice Trognon
http://www.javadevel.com

Avatar
Targeur fou
Trognon Patrice wrote:

Bonjour,

Targeur fou wrote:


[...clip]


Tu parles de procédures stockées. Le code contenu au niveau du
serveur dans la base même et qu'Oracle est capable de traiter
directement pour réaliser de petites tâches constitue ce que l'on
appelle des procédures stockées. Je sais que c'est faisable en
PL/SQL


(normal, un "code natif") et en Java (par l'intermédiaire d'un JRE
quelconque) mais en C, je ne suis pas sûr pour Oracle (DB2 oui).

[...clip]


interessant ca, tu peux développer des procédures stockées en C
sur DB2, c'est possible en PostgreSQL je savais pas que DB2 le
faisait

aussi ?


Bah, je me suis amusé à chercher "stored procedures in C " sous
Google et j'ai constaté que DB2 savait le faire :)

Comment ils gerent les problèmes de secu, je veux dire le code
de la procsto développée en C s'execute bien sur avec les droits
de la base de données (niveau processus je parle) donc comment
empecher que ce code n'effectue des opérations un peu légères
(open de fichiers de la base, etc etc) ?


Je ne sais pas. Tu trouveras peut être des infos à ce sujet dans le
redbook correspondant ici :
http://www.redbooks.ibm.com/abstracts/sg244693.html

Regis