TIPURI DE DATE
FoxPro
Principalele tipuri de date cu care lucrează FoxPro sunt următoarele:
Oracle
Principalele tipuri de date (“native”) cu care lucrează Oracle sunt următoarele:
LDD (Limbaj
Limbaj de Descriere a Datelor)
Datelor
FoxPro (9.0)
Cheia Primara:
Creare de tabele folosind script
Sintaxa
Exemplu:
Modificarea structurii se poate face prin comanda ALTER TABLE (se mai foloseşte şi comanda
MODIFY STRUCTURE).
Structura comenzii ALTER este asemănătoare cu cea de la Oracle (după cum o să se observe din
rândurile următoare) şi are rolul de a modifica structura unei tabele:fie prin adăugare de
coloane (ADD-cand se adauga trebuie precizata structura coloanei respective), sau a unei
coloane (ALTER [COLUMN]; se adăuga o validare SET CHECK sau se modifica un câmp,
sau se renunţa la valorile implicite DROP DEFULT, se anulează o validare DROP CHECK).
De asemenea, se poate renunţa la o coloană (DROP [COLUMN]), sau se poate adăugă /
renunţa la o cheie primară sau cheie externă (ADD /DROP PRIMARY KEY sau ADD/DROP
Foreign KEY).Tot în cadrul comenzii alter se poate redenumi o coloană.
Sintaxa
Exemple
Modificare tabele
Stergere tabela:
Drop table regiuni
LMD (Limbajul
( de Manipulare a Datelor))
SELECT
Sintaxa
[PREFERENCE PreferenceName]
[NOCONSOLE]
[PLAIN]
[NOWAIT]
[WHERE JoinCondition [AND JoinCondition ...]
[AND | OR FilterCondition [AND | OR FilterCondition ...]]]
[GROUP BY GroupColumn [, GroupColumn ...]]
[HAVING FilterCondition]
[UNION [ALL] SELECTCommand]
[ORDER BY Order_Item [ASC | DESC] [, Order_Item [ASC | DESC] ...]]
Select * from emitenti where denumire like "S%" or denumire like "S%"
Sau
Sau
• Sa se afiseze cotatiile care nu corespund unui emitent (merge daca pe insert e setat ignore)
INSERT
UPDATE
Sintaxa
UPDATE [DatabaseName1!]TableName1
SET Column_Name1 = eExpression1
[, Column_Name2 = eExpression2 ...]
WHERE FilterCondition1 [AND | OR FilterCondition2 ...]]
DELETE
Sintaxa
Functii SQL
• Functie conversie string catre number: chr(). Functie ce returneaza data sau data+ora
curenta: date() si datetime()
Exemplu: select "Simbolul "+simb+"avand volumul"+str(vol) from cotatii where data_c=date()
Select simb,count(vol) nr,sum(vol) suma,avg(vol) medie from cotatii where vol>3000 group by
simb
• Sa se afiseze suma, media volumului de tranzactionare pentru cazurile in care media a fost
mai mare ca 7500.
Select simb,count(vol) nr,sum(vol) suma,avg(vol) medie from cotatii group by simb having
medie>7500
ATENTIE: Clauza where filtreaza inregistrarile tabelei(lor) initiale iar having filtreaza rezultatul
obtinut dupa grupare.
Limbajul FOX
Instructiune Efect
MODIFY STRUCTURE Modificarea structurii logice a unei tabele
DISPLAY STRUCTURE sau LIST Vizualizarea structurii logice
STRUCTURE
Close tables Se plaseaza indicatorul la inceputul tabelei
Use cotatii cotatii
Go top
?dbf() Afiseaza tabela deschisa: cotatii
Go bottom Se plaseaza indicatorul la sfarsitul tabelei
Skip +2 Se se deplaseaza peste 2 inregistrari inainte
Skip -2 Se se deplaseaza peste 2 inregistrari inapoi
Go top TLV 12/10/05
?nume,data_c
Go 3 TLV 01/23/05
?simb,data_c
Display sau Se afiseaza inregistrarea curenta
list next 1 TLV 01/23/05 7000 1.14
Display all Se afiseaza intreaga tabela, in diferite formate
List
Brow
Go top Simbolul TLV are pretul 1
?"Simbolul "+simb+" are pretul"+str(pret) Se face rotunjire.
Go top Simbolul TLV are pretul 1.1500
?"Simbolul "+simb+" are pretul"+str(pret,10,4) In acest caz se specifica lungimea maxima a
sirului si cat se se aloce pentru partea
zecimala.
go bottom SNP 01/03/05 4 .F. .F.
?simb,data_c,recno(),bof(),eof() Recno() – returneaza nr inregistrarii curente
Eof()- returneaza .T. daca este sfarsitul tabelei
si .F. altfel
Bof()- returneaza .T. daca este inceputul
tabelei si .F. altfel
?reccount() Numarul inregistrarilor din tabela curenta: 4
Go bottom / / 5 .F. .T.
Skip
?simb,data_c,recno(),bof(),eof()
Index on simb+dtoc(data_c) tag cota_pk unique Se construieste un index care nu accepta
set order to cota_pk duplicate pe simb si data_c. Se activeaza
list indexul creat si se afiseaza inregistrarile
set order to sortate. Dupa afisare se dezactiveaza indexul.
go top Afiseaza cotatiile care au pretul mai mare ca
list for pret>1.14 1.14
go top Afiseaza cotatiile care au pretul mai mare ca
list next 2 for pret>1.14 1.14 din primele doua inregistrari
Close tables Afisza numarul emitentilor care au capitalul
Use emitenti social mai mare decat 3000
Count for cap_soc>3000 to nr
?"numarul de emitenti avand capitatlul social mai
mare decat 3000 este: "+str(nr)
set talk off Afiseaza suma capitalulilor sociale
sum cap_soc to capital Se va folosi set talk off daca nu se doreste sa
?[suma capitalulilor sociale este: ],capital se afiseze suma de doua ori.
Average cap_soc for simb=[T] to medie Media capitalulilor sociale pentru societatile
?[media capitalulilor sociale este: ],medie ce incep cu T
Average cap_soc to medie Emitentii ce au capitalul social mai mare decat
List for cap_soc>medie media
Use emitenti Afiseaza minimul, suma si media capitalulilor
calculate sociale ale emitentilor
min(cap_soc),sum(cap_soc),avg(cap_soc) to
minm,suma,medie
?minm,suma,medie
Use cotatii Se mareste cu 20% cotatiile pentru TLV
Replace for simb=[TLV] pret with pret*1.2
use cotatii Se sterg cotatiile cu volum mai mic decat
Delete for vol<8000 8000. Initial doar se marcheaza pentru
brow stergere. Pack: stergere fizica. Recall all: se
pack sau recall all readuc inregistrarile care nu au fost sterse
brow fizic.
Zap sau Se sterg fizic toate inregistrarile din tabela.
Delete all
Pack
Use cotatii Se adauga la sfaristul tabelei cotatii
append from emitenti fields simb simbolurile din emitenti
• For <conditie> se refera la inregistrarile pentru care <conditie> are valoarea .T.
• While <conditie> se refera la inregistrarile cuprinse intre inregistrarea curenta si prima
inregistrare pentru care <conditie> este .F.
Cautare indexata:
Exemplu:
use emitenti
index on simb tag isimb
seek "TLV"
if found()
display
endif
Jonctiuni
sele 1
use emitenti
index on simb to p1
sele 2
use cotatii
set relation to simb into emitenti
set skip to emitenti
?relation(1) -> afiseaza pe ce s-a facut prima legatura adica: SIMB
browse fields emitenti.denumire,cotatii.data_c,cotatii.pret FOR cotatii.simb='TLV'
sau
join with emitenti to cemit for simb=A.simb fields a.denumire,data_c,pret
select * from cemit
1. Structura secventiala:
O astfel de structura este data de o secventa de comenzi, care nu contine structurile alternative IF si
CASE sau structurile repetitive (WHILE, FOR, SCAN).
Exemplu
2. Structura alternativa
If <conditie>
Secventa - instructiuni 1
Else
Secventa – instructiuni 2
Exemplu
Clear
Go top
If vol>5000
?simb," este la categoria I"
else
?"este la categoria II"
endif
Do case
Case expresie 1
Secventa 1
Case expresie 2
Secventa 2
….
Case expresie n
Secventa n
Otherwise
Secventa
Endcase
3. Structura repetitiva
Exemple:
1. Sa se afiseze cotatiile cat si numarul lor din luna curenta folosind functia locate
close tables
Use cotatii
Set talk off
Nr=0
Locate for year(data_c)=year(date()) and month(data_c)=month(date())
Do while found()
display
Nr=nr+1
Continue
Enddo
?"Numar total de cotatii:",nr
close tables
use emitenti
go top
clear
scan for substr(denumire,1,1)='T'
?denumire
endscan
close tables
use emitenti
go top
clear
for i=1 to reccount()
?iif(substr(denumire,1,1)='P',denumire,'Nu incepe cu P')
skip
?replicate("-",35)
endfor
use