LATHUND FÖR INFORMIX-SQL

 

I detta avsnitt beskrivs ett antal praktiska handgrepp som behövs för att köra Informix Universal Server.

SQL editor på WINDOWS

När du skapat din databas så skall den fyllas med typer, tabeller och värden. Detta görs från SQL-editorn.

När du startat SQL editorn måste du först av allt ställa in databas och server.

I SQL editorn kan man fylla databasen med typer, tabeller och värden genom att editera filer med SQL-satser och exekvera dessa. För att editera filer så skapar, öpnnar och stänger man filer precis som i vilken annan Windows-applikation som helst.

Därefter lägger man in SQL-satser i filen. Lägg in följande i filen för att skapa en typ och en tabell:

create row type katt_t

(

namn varchar(30),

glad integer

);

create table katt of type katt_t;

Innan man exekverar filens SQL-satser kan man kontrollera att syntaxen är korrekt.

Då man är nöjd med SQL-satserna är det dags att exekvera dem.

Om allt gått bra har nu typen katt_t och tabellen katt skapats. För att lägga in värden i tabellen katt behövs ytterligare några SQL-satser. Det är oftast lämpligt att lägga SQL-satser som skapar värden i en separat fil.

Lägg in följande SQL-satser:

insert into katt values (bull, 0);

insert into katt values (maja, 20);

insert into katt values (pelle, 100);

Nu innehåller databasen en typ katt_t och en tabell katt med tre rader. För att titta på värdena i tabellen katt kan Du skriva och exekvera SQL-satser. Resultaten från en exekvering placeras under en flik som heter Output1. (Exekverar man flera SQL-satser så skapas en flik för varje sats.)

Lägg in följande SQL-sats:

Select namn, glad from katt where glad > 15;

Det finns ytterligare ett sätt att titta på de typer och tabeller man skapat, nämligen genom programmet Schema Knowledge.

SQL editor på UNIX

UNIX miljö:

Du hittar informixdatabaserna från ditt hemkonto genom följande kommandon:

>cd /misc/packages/informix2

>. informix2

>dbaccess

DBACCESS:

Informix SQL editor nås via Query Language:

Kortkommandon är: n, r, m, u, o, c, s, i, d, e

CTR-W ger hjälp

CTR-C avbryter om det inte finns tillgång till kommandot Exit eller Escape

ARBETSSÄTT:

Skriv SQL-uttrycken i en fil.sql

I dbaccesss i Query-language välj Choose som ger alla sql-filer som alternativ och välj att läsa in den sql-fil du vill exekvera (run) i Informix SQL editor. OBS: dbaccess måste startas i den katalog där fil.sql ligger annars hittar den inte filen

För att exekvera sql utrycken så välj Run.

Om det finns fel i filen så måste den editeras och helt/delvis köras om.

alt 1. I dbaccess välj Use-editor och välj editor emacs

Observera att filen.sql inte ändras utan det som kommer att ändras i emacs-editorn är

det som har lästs in via Choose och som nu finns i Informix SQL editor.

För att ändra i den ursprungliga filen så gör enligt alt 2 eller välj Output eller Save.

Output och Save sparar de sql satser som finns i Informix SQL editor på en fil.

alt 2. Editera filen i emacs direkt och läs in filen på nytt mha av Choose.

alt 3. Editera direkt i Informix SQL-editor mha kommandot Modify, men observera att

SQL-satserna inte ändras på någon fil.

 

Att omorganisera en databas

Antag att man vill ändra en typ eller en tabell genom att lägga till eller ta bort attribut. Då måste man först kasta den gamla typen (tabellen) och sedan skapa den på nytt. Man kastar typer och tabeller med hjälp av kommandot drop. Om man vill kasta flera typer och tabeller måste man tänka igenom i vilken ordning man kastar dem. Man får nämligen inte kasta en typ eller tabell om den används av någon annan typ eller tabell. Vill man kasta både tabellen katt och typen katt_t måste man först kasta tabellen och sedan typen:

Drop table katt;

Drop row type katt_t restrict;

Att använda Excalibur Image DataBlade Module

Med hjälp av Excalibur bilddatablad kan man lagra bilder i en databas och jämföra dessa med varandra. Man kan jämföra bilder med avseende på färg, gestalt och textur. Man behöver känna till fyra saker för att kunna arbeta med Excalibur.

Att deklarera attribut

Ett attribut som är en bild skall vara av typen ifdimgdesc. I följande exempel är image deklarerat som detta.

create row type product_t

(

colours set(varchar(20) not null),

price float,

image ifdimgdesc

);

Att skapa index

För att kunna jämföra bilder med varandra så skapar och använder Excalibur en intern representation av bilderna. Det finns en representation för vardera färg, gestalt och textur. Dessa representationer skapas genom att användaren skapar index för de attribut som är bilder. För att skapa ett färg-index för attributet image i tabellen product skriver man så här:

create index gc_image on product (image IfdImgDesc_ops)

using frnet(extractor = 'IpdColorImageFE(RETINA_WIDTH = 32, RETINA_HEIGHT = 32)') IN sbspace;

Här anger RETINA_WIDTH och RETINA_HEIGHT hur många pixlar som bilden skall delas upp i inför konvertering till den interna representationen - 32 är ett bra värde här.

För att skapa ett gestalt-index för attributet image i tabellen product skriver man så här:

create index gge_image on product(image IfdImgDesc_ops)

using frnet(extractor = 'IpdGestaltImageFE(RETINA_WIDTH = 32, RETINA_HEIGHT = 32)') IN sbspace;

. För att skapa ett textur-index för attributet image i tabellen product skriver man så här:

create index gte_image on product(image IfdImgDesc_ops)

using frnet(extractor = 'IpdTextureImageFE(RETINA_WIDTH = 32, RETINA_HEIGHT = 32)') IN sbspace;

Att lägga in bilder

Nedan ges ett exempel på hur man lägger in en bild som värde för ett attribut. De flesta parametrarna kan man låta vara NULL; det enda som behöver anges är adressen till den fil där bilden ligger, i detta fall '/misc4/packages/informix/cone.gif' .

insert into product values

(11, 'Harley', "SET{ROW(31, 2)}", "SET{'black', 'blue'}", 20000,

row(row(row('ifx_file', NULL::LLD_Lob, '/misc4/packages/informix/cone.gif'), NULL::lvarchar),

'NULL'::varchar, 'NULL'::varchar, NULL::integer, NULL::integer, NULL::varchar)::ifdimgdesc);

Att jämföra bilder

För att jämföra bilder använder man funktionen Resembles. Frågan nedan ger som resultat artikelnummer, likhetsgrad och operativsystemadress för bild på samtliga produkter. Likhetsgraden avser färglikhet med bilden '/misc4/packages/informix/redrose.gif'. Man anger alltså som första argument det attribut (här: image) som innehåller bilderna. Som andra attribut ges ett komplext värde som dels anger vilken slags bildjämförelse som skall göras (här: lpdColorImage), dels den bild som man skall jämföra med. För att ange bilden ger man adressen samt information om bildens format (här: gif) och dess typ (här: RGB). Om man vill jämföra med avseende på gestalt eller textur så skriver man istället för lpdColorImage lpdGestaltImage och lpdTextureImage, respektive.

select ano, rank, image.location.locator.lo_location from product where

Resembles(

image,

row(

'IpdColorImageFE(RETINA_WIDTH = 32, RETINA_HEIGHT = 32)',

row(row(row('ifx_file', NULL::LLD_Lob, '/misc4/packages/informix/redrose.gif'), NULL::lvarchar),

'gif','RGB',40, 40, 'COMPRESSED')::ifdimgdesc

),

rank #REAL

);

Observera att RETINA_WIDTH och RETINA_HEIGHT måste ha samma värden som i motsvarande index.