Oracle Rdb utvecklades av Digital Equipment på 70 och 80-talet. Databasen
finns till OpenVMS och Unix. En PC version gjordes också men utvecklingen av den
lades ned. Digital sålde i och med version 6.1 den till Oracle. Idag är
versionen 7.2 och snurrar i OpenVMS 8.3 både på Alpha och Intanium.
Det är i OpenVMS som Oracle Rdb går bäst. Den är bättre än t.ex. Oracle 11g
för OpenVMS då den är utvecklad i Unix och har kvar en helt del egenskaper från
den miljön som gör den mer svårhanterlig i OpenVMS än Oracle Rdb.
Oracle Rdb var i början utvecklad att gå på en maskin med en databas. Idag
kan man ha den distribuerad mellan olika maskiner.
Sql kompilator
Oracle Rdb är ensam (?) om att ha en SQL kompilator. Hur den fungerar ska jag
nu beskriva.
Man skriver programmet i vanlig kod som C, COBOL, FORTRAN, Pascal m.m. En C
kod kan se ut så här:
#pragma module Person
/*
**
** INCLUDE FILES
**
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <sql_rdb_headers.h>
void SET_TRANSACTION_RO(long*);
void ROLLBACK(long*);
void OPEN_PERSON_CUR(long*);
void FETCH_PERSON_CUR(long*,char*,char*);
void CLOSE_PERSON_CUR(long*);
void SQL_error(void);
main ()
{
long int sqlcode;
char fnamn[30];
char enamn[30];
SET_TRANSACTION_RO(&sqlcode);
if(sqlcode < 0) SQL_error();
OPEN_PERSON_CUR(&sqlcode);
if(sqlcode < 0) SQL_error();
do
{
FETCH_PERSON_CUR(&sqlcode, fnamn, enamn);
if(sqlcode < 0) SQL_error();
if(sqlcode == 0 ) printf ("%s %s \n", fnamn, enamn);
} while (sqlcode == 0 );
CLOSE_PERSON_CUR(&sqlcode);
if(sqlcode < 0) SQL_error();
ROLLBACK(&sqlcode);
if(sqlcode < 0) SQL_error();
}
void SQL_error (void)
{
long sqlcode;
int status;
char error_buffer[1024];
long err_msg_len;
status = sql_get_error_text(error_buffer, 1024, &err_msg_len);
error_buffer[err_msg_len] = '\0';
printf("\n SQL error");
printf("%.*s\n", err_msg_len, error_buffer );
printf("\n");
ROLLBACK(&sqlcode);
exit(0);
}
Och SQL koden:
MODULE PERSON_MOD
LANGUAGE C
AUTHORIZATION rdb$dbhandle
DECLARE ALIAS FILENAME MEDLEM
DECLARE PERSON_CUR CURSOR FOR SELECT FNAMN,ENAMN
FROM PERSON
PROCEDURE SET_TRANSACTION_RO
SQLCODE;
SET TRANSACTION READ WRITE;
PROCEDURE ROLLBACK
SQLCODE;
ROLLBACK WORK ;
PROCEDURE OPEN_PERSON_CUR
SQLCODE;
OPEN PERSON_CUR;
PROCEDURE FETCH_PERSON_CUR
SQLCODE
FNAMN FNAMN
ENAMN ENAMN;
FETCH PERSON_CUR INTO FNAMN,ENAMN;
PROCEDURE CLOSE_PERSON_CUR
SQLCODE;
CLOSE PERSON_CUR;
Om filerna heter person.c och person_mod.sqlmod så
kompilerar och länkar man dem på detta vis:
$ cc
person.c
$ sql$mod
person_mod.sqlmod
$ link
person,person_mod
Som de som programmerar ser så är det en separat SQL kompilator.
Nu har man en person.exe som man kan köra. Volá