Uppåt

 

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á

 

Skicka e-post till

med frågor eller kommentarer om den här webbplatsen.
Senast ändrad: 09 december 2008