declare
cursor c1 is
select 'drop table '||table_name|| ' cascade constraints' text from all_tables where owner ='USER_NAME';
begin
for i in c1 loop
BEGIN
dbms_output.put_line('Performing: '||i.text);
EXECUTE IMMEDIATE (i.text);
EXCEPTION
When Others Then
DBMS_OUTPUT.PUT_LINE('ERROR='||i.text);
DBMS_OUTPUT.PUT_LINE(SQLERRM);
--RAISE;
END;
end loop;
end;
/
23 Kasım 2007 Cuma
DATAFILE AND TABLESPACE RENAME
-------------------------datafile adını değiştirmek-----------------------
sql>shutdown immediate;
manuel olarak,dizindeki 'test' datafile'ının adını değiştiriyoruz.
sql>HOST MOVE D:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL2\TEST.DBF D:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL2\INTERBASE.DBF
SQL>alter database rename file 'D:\oracle\product\10.2.0\oradata\orcl2\test.dbf' to 'D:\oracle\product\10.2.0\oradata\orcl2\INTERBASE.dbf';
sql>alter database open;
------------------------tablespace adını değiştirmek----------------
ALTER TABLESPACE TEST RENAME TO INTERBASE;
sql>shutdown immediate;
manuel olarak,dizindeki 'test' datafile'ının adını değiştiriyoruz.
sql>HOST MOVE D:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL2\TEST.DBF D:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL2\INTERBASE.DBF
SQL>alter database rename file 'D:\oracle\product\10.2.0\oradata\orcl2\test.dbf' to 'D:\oracle\product\10.2.0\oradata\orcl2\INTERBASE.dbf';
sql>alter database open;
------------------------tablespace adını değiştirmek----------------
ALTER TABLESPACE TEST RENAME TO INTERBASE;
ROWNUM
--------------------ilk 5 kayıt---------------------------------------
select * from
(select rownum row_num,user_name.table_name.* from
user_name.table_name where rownum <= 5 )
where row_num > 0
------------------belirli aralik arasi kayitlar------------------------
select * from
(select rownum row_num,user_name.table_name.* from
user_name.table_name where rownum <= 10 )
where row_num > 5
-----------------tabloda sondan 6. kayıt örneği-----------------------
SELECT *
FROM (SELECT ROWNUM sirasi,table_name.*
FROM table_name)
WHERE sirasi = (SELECT (MAX (ROWNUM) - 5)
FROM table_name);
select * from
(select rownum row_num,user_name.table_name.* from
user_name.table_name where rownum <= 5 )
where row_num > 0
------------------belirli aralik arasi kayitlar------------------------
select * from
(select rownum row_num,user_name.table_name.* from
user_name.table_name where rownum <= 10 )
where row_num > 5
-----------------tabloda sondan 6. kayıt örneği-----------------------
SELECT *
FROM (SELECT ROWNUM sirasi,table_name.*
FROM table_name)
WHERE sirasi = (SELECT (MAX (ROWNUM) - 5)
FROM table_name);
LOGIN HOST USER ON ENTERPRISE MANAGER
Have you gotten the error; "RemoteOperationException: ERROR: wrong password for user" with Oracle 10g?
If so, it is probably because the OS user that you are trying to login to the Oracle Enterprise Manager
with has not been setup to allow the user to logon as a "Batch Job." To resolve this issue:
Go to "Control Panel" -> "Admin Tools" -> "Local Security Policy."
Within "Local Policies", go to user "Right Assignment."
Add the user to "Logon as a Batch Job."
The logon problem should now be resolved. This is for trying to run Oracle 10g on Windows 2003 Server.
------------------------------------------------------------------------
denetim masası-yönetimsel araçlar-yerel güvenlik ilkesi-yerel ilkeler-kullanıcı hakları ataması-
toplu iş olarak oturum aç ------kullanıcıyı ekleriz.(domain_name\user_name)
host user: domain_name\user_name
host password : ....
If so, it is probably because the OS user that you are trying to login to the Oracle Enterprise Manager
with has not been setup to allow the user to logon as a "Batch Job." To resolve this issue:
Go to "Control Panel" -> "Admin Tools" -> "Local Security Policy."
Within "Local Policies", go to user "Right Assignment."
Add the user to "Logon as a Batch Job."
The logon problem should now be resolved. This is for trying to run Oracle 10g on Windows 2003 Server.
------------------------------------------------------------------------
denetim masası-yönetimsel araçlar-yerel güvenlik ilkesi-yerel ilkeler-kullanıcı hakları ataması-
toplu iş olarak oturum aç ------kullanıcıyı ekleriz.(domain_name\user_name)
host user: domain_name\user_name
host password : ....
RENAME USER
----------kullanıcı adını değiştirme--------------
1-connect sys/sys as sysdba
2-select user# , name from user$;
3-update user$ set name='INTERBASE' where name='ORHAN';
4-commit;
5-shutdown immediate;
6- startup mount;
7- alter database open;
8- alter user INTERBASE identified by o;
1-connect sys/sys as sysdba
2-select user# , name from user$;
3-update user$ set name='INTERBASE' where name='ORHAN';
4-commit;
5-shutdown immediate;
6- startup mount;
7- alter database open;
8- alter user INTERBASE identified by o;
PROFILE
----------------------PROFİL OLUŞTURMA----------------------
CREATE PROFILE ahmet_profile LIMIT
FAILED_LOGIN_ATTEMPTS 1
password_lock_time 1/1440;
// yalnış girişten sonra bir daha bağlanmaya çalışırsak user'i kilitler.(1 defa yalnış girme hakkı tanır.)
// 1 dakika(1/1440) boyunca kilitli kalır.
ALTER USER ahmet PROFILE ahmet_profile;
SELECT ACCOUNT_STATUS FROM DBA_USERS WHERE USERNAME='AHMET';
conn ahmet
asdds
conn ahmet
o
ORA-28000: the account is locked // kilitlendi.
conn sys / as sysdba
SELECT ACCOUNT_STATUS FROM DBA_USERS WHERE USERNAME='AHMET';
conn ahmet
o
connected. // 1 dakika sonra bağlandı.
SELECT ACCOUNT_STATUS FROM DBA_USERS WHERE USERNAME='AHMET';
-----ayarların eski haline gelmesi için 'default' kullanılır-----
conn sys / as sysdba
alter profile default limit password_lock_time 1;
alter profile default LIMIT failed_login_attempts 3;
-------------profil silme--------------------------------------
drop profile ahmet_profile; // sadece oluşturulmuş bu profili siler.
drop profile ahmet_profile cascade; // bu profile tanıtılmış user'ların profil ayarlarını da siler.
----şifreyi fonksiyonumuzdaki koda göre değiştirme------
conn sys / as sysdba
CREATE OR REPLACE FUNCTION password_function (
username VARCHAR2,
password VARCHAR2,
old_password VARCHAR2)
RETURN BOOLEAN AS
BEGIN
IF LENGTH(password) < 8 THEN
RETURN FALSE;
ELSE
RETURN TRUE;
END IF;
END password_function;
/
ALTER PROFILE ahmet_profile LIMIT
PASSWORD_VERIFY_FUNCTION password_function;
ALTER USER ahmet PROFILE ahmet_profile;
conn ahmet
o
connected.
alter user ahmet identified by a;
// 'ORA-28003: password verification for the specified password failed' hatasını verir.
ama
alter user ahmet identified by ahmetahmet;
//'ahmetahmet' gibi 8 karakterden fazla şifre girersek kabül eder.
CREATE PROFILE ahmet_profile LIMIT
FAILED_LOGIN_ATTEMPTS 1
password_lock_time 1/1440;
// yalnış girişten sonra bir daha bağlanmaya çalışırsak user'i kilitler.(1 defa yalnış girme hakkı tanır.)
// 1 dakika(1/1440) boyunca kilitli kalır.
ALTER USER ahmet PROFILE ahmet_profile;
SELECT ACCOUNT_STATUS FROM DBA_USERS WHERE USERNAME='AHMET';
conn ahmet
asdds
conn ahmet
o
ORA-28000: the account is locked // kilitlendi.
conn sys / as sysdba
SELECT ACCOUNT_STATUS FROM DBA_USERS WHERE USERNAME='AHMET';
conn ahmet
o
connected. // 1 dakika sonra bağlandı.
SELECT ACCOUNT_STATUS FROM DBA_USERS WHERE USERNAME='AHMET';
-----ayarların eski haline gelmesi için 'default' kullanılır-----
conn sys / as sysdba
alter profile default limit password_lock_time 1;
alter profile default LIMIT failed_login_attempts 3;
-------------profil silme--------------------------------------
drop profile ahmet_profile; // sadece oluşturulmuş bu profili siler.
drop profile ahmet_profile cascade; // bu profile tanıtılmış user'ların profil ayarlarını da siler.
----şifreyi fonksiyonumuzdaki koda göre değiştirme------
conn sys / as sysdba
CREATE OR REPLACE FUNCTION password_function (
username VARCHAR2,
password VARCHAR2,
old_password VARCHAR2)
RETURN BOOLEAN AS
BEGIN
IF LENGTH(password) < 8 THEN
RETURN FALSE;
ELSE
RETURN TRUE;
END IF;
END password_function;
/
ALTER PROFILE ahmet_profile LIMIT
PASSWORD_VERIFY_FUNCTION password_function;
ALTER USER ahmet PROFILE ahmet_profile;
conn ahmet
o
connected.
alter user ahmet identified by a;
// 'ORA-28003: password verification for the specified password failed' hatasını verir.
ama
alter user ahmet identified by ahmetahmet;
//'ahmetahmet' gibi 8 karakterden fazla şifre girersek kabül eder.
LOCK & UNLOCK
----------------LOCK & UNLOCK (USER KİLİTLEME)------------------
ALTER USER ahmet ACCOUNT LOCK;
ALTER USER ahmet ACCOUNT UNLOCK;
ALTER USER ahmet PASSWORD EXPIRE; // user'in şifresini öldürebilir,onu yeni şifre girmesi için zorlarız.
SELECT ACCOUNT_STATUS FROM DBA_USERS WHERE USERNAME='AHMET';
conn ahmet
SELECT * FROM SESSION_PRIVS;
create table hastalar as select * from orhan.hastalar;
--------izin yoksa
conn sys/o@orcl as sysdba
grant alter tablespace to ahmet; yada
ALTER USER ahmet QUOTA UNLIMITED ON users;------------
ALTER USER ahmet ACCOUNT LOCK;
SELECT ACCOUNT_STATUS FROM DBA_USERS WHERE USERNAME='AHMET';
conn ali
conn ahmet // burada 'ORA-28000: the account is locked' user kilitli hatasını verecek.
conn sys / as sysdba
ALTER USER ahmet ACCOUNT UNLOCK;
SELECT ACCOUNT_STATUS FROM DBA_USERS WHERE USERNAME='AHMET';
conn ahmet
ALTER USER ahmet PASSWORD EXPIRE;
conn ali
conn ahmet // burada 'ORA-28001: the password has expired' user şifresi öldü hatasını verecek.
Changing password for ahmet
New password: o
Retype new password:o
// ile yeni şifreyi 2 kere girmemizi isteyecek.
connected.
ALTER USER ahmet ACCOUNT LOCK;
ALTER USER ahmet ACCOUNT UNLOCK;
ALTER USER ahmet PASSWORD EXPIRE; // user'in şifresini öldürebilir,onu yeni şifre girmesi için zorlarız.
SELECT ACCOUNT_STATUS FROM DBA_USERS WHERE USERNAME='AHMET';
conn ahmet
SELECT * FROM SESSION_PRIVS;
create table hastalar as select * from orhan.hastalar;
--------izin yoksa
conn sys/o@orcl as sysdba
grant alter tablespace to ahmet; yada
ALTER USER ahmet QUOTA UNLIMITED ON users;------------
ALTER USER ahmet ACCOUNT LOCK;
SELECT ACCOUNT_STATUS FROM DBA_USERS WHERE USERNAME='AHMET';
conn ali
conn ahmet // burada 'ORA-28000: the account is locked' user kilitli hatasını verecek.
conn sys / as sysdba
ALTER USER ahmet ACCOUNT UNLOCK;
SELECT ACCOUNT_STATUS FROM DBA_USERS WHERE USERNAME='AHMET';
conn ahmet
ALTER USER ahmet PASSWORD EXPIRE;
conn ali
conn ahmet // burada 'ORA-28001: the password has expired' user şifresi öldü hatasını verecek.
Changing password for ahmet
New password: o
Retype new password:o
// ile yeni şifreyi 2 kere girmemizi isteyecek.
connected.
PASSWORD GERİ GETİRME
----------------ESKİ ŞİFREYİ GERİ GETİRME-------------
SELECT PASSWORD FROM DBA_USERS WHERE USERNAME='AHMET';
PASSWORD
----------------
4F59036A96F486EC
alter user ahmet identified by a;
conn ahmet
o
// 'ORA-01017: invalid username/password; logon denied' eski şifreyi girdiğim için şifre geçersiz hatası verdi.
conn ahmet
a
connected.
alter user ahmet identified by values '4F59036A96F486EC';
conn ahmet
o
connected.
-------------------------------------------------
ALTER USER ahmet ACCOUNT LOCK;
ALTER USER ahmet PASSWORD EXPIRE;
// aynı anda hem lock edip hem de şifresini öldürebiliriz.
SELECT PASSWORD FROM DBA_USERS WHERE USERNAME='AHMET';
PASSWORD
----------------
4F59036A96F486EC
alter user ahmet identified by a;
conn ahmet
o
// 'ORA-01017: invalid username/password; logon denied' eski şifreyi girdiğim için şifre geçersiz hatası verdi.
conn ahmet
a
connected.
alter user ahmet identified by values '4F59036A96F486EC';
conn ahmet
o
connected.
-------------------------------------------------
ALTER USER ahmet ACCOUNT LOCK;
ALTER USER ahmet PASSWORD EXPIRE;
// aynı anda hem lock edip hem de şifresini öldürebiliriz.
QUOTA ON TABLESPACE
ALTER USER ahmet QUOTA UNLIMITED ON test;
// komutu ile 'ahmet' kullanıcısına 'test' tablespace'i üzerinde limitsiz kullanım sunabiliriz.
yada
ALTER USER ahmet QUOTA 100M ON test;
// komutu ile 'ahmet' kullanıcısına 'test' tablespace'i üzerinde 100 mb'lık alanı kullandırabiliriz.
// komutu ile 'ahmet' kullanıcısına 'test' tablespace'i üzerinde limitsiz kullanım sunabiliriz.
yada
ALTER USER ahmet QUOTA 100M ON test;
// komutu ile 'ahmet' kullanıcısına 'test' tablespace'i üzerinde 100 mb'lık alanı kullandırabiliriz.
CHANGE PASSWORD
------------2 şekilde password(şifre) değiştirilebilir---------
1.yol;
alter user user_name identified by;
alter user orhan identified by a;
2.yol;
SQL> password
Changing password for ORHAN
Old password:o
New password:a
Retype new password:a
1.yol;
alter user user_name identified by
alter user orhan identified by a;
2.yol;
SQL> password
Changing password for ORHAN
Old password:o
New password:a
Retype new password:a
JOIN,UNION,UNION ALL,MINUS
------------------------JOIN(TABLOLARI BİRLEŞTİRME)-------------
inner join = join
left outer join
right outer join
cross join
----------------------------------inner join = join--------------------------
select h.hasta_no,h.hasta_adi,k.klinik_adi from hastalar h , klinik k where h.klinik_id=k.klinik_id;
ile
select h.hasta_no,h.hasta_adi,k.klinik_adi from hastalar h inner join klinik k on(h.klinik_id=k.klinik_id);
ile
select h.hasta_no,h.hasta_adi,k.klinik_adi from hastalar h join klinik k on(h.klinik_id=k.klinik_id);
aynı sql sorgularıdır.her iki tabloda da ortak olan alanları getirir.
---------------------------------left outer join-------------------------------
insert into klinik values(4,'psikiyatri');
select * from klinik;
insert into hastalar(hasta_id,hasta_no,hasta_adi) values(6,500,'hasan');
select * from hastalar;
select h.hasta_no,h.hasta_adi,k.klinik_adi from hastalar h left outer join klinik k on(h.klinik_id=k.klinik_id);
soldaki tabloda(hastalar) olupta,sağdaki tabloda(klinik) olmayan kayıtları getirir.
----------------------------------right outer join-------------------------
left outer join 'in tersidir,yani;
sağdaki tabloda(klinik) olupta, soldaki tabloda(hastalar) olmayan kayıtları getirir.
select h.hasta_no,h.hasta_adi,k.klinik_adi from hastalar h right outer join klinik k on(h.klinik_id=k.klinik_id);
------------------------------------cross join------------------------------
Her iki tabloyu çapraz olarak birleştirir.
Yani, ilk tablodaki her bir satır için ikinci tablodaki her satır sonuç olarak döner.
burada ortak alanlar eşitlenmez,sadece tablolar belirtilir.
select h.hasta_no,h.hasta_adi,k.klinik_adi from hastalar h cross join klinik k;
-------------------------UNION VE UNION ALL------------------
UNION ve UNION ALL ifadeleri iki sorgu sonucunun birleştirilmesi için kullanılır.
Tek farkı, UNION mükerrer kayıtları getirmez, UNION ALL ise tüm kayıtları olduğu gibi listeler.
1-)İki tablonun sütun sayısı aynı olmalıdır.
2-)İlk tablodaki her sütunun veri tipi ikinci tabloda ona karşılık gelen sütunun veri tipiyle aynı olmalıdır.
3-)İki tablonun hiç biri ORDER BEY cümleciğiyle sıralanamaz.
select * from hastalar1;
select * from hastalar2;
delete from hastalar2;
insert into hastalar2 values(10,1500,'aaaaaaaaa',1);
insert into hastalar2 values(20,2000,'bbbbbbbbb',2);
select hasta_id,hasta_no,hasta_adi from hastalar1
where hasta_no<'300'
union
select hasta_id,hasta_no,hasta_adi from hastalar2
where hasta_id between '10' and '20';
---2 tane 'ahmet' kaydı olduğu halde union tekrarlarını getirmez---
select hasta_adi from hastalar1
where hasta_adi='ahmet'
union
select hasta_adi from hastalar2
where hasta_id between '10' and '20';
--------union all' u kullanırsak tüm tekrarları da getirir------------
select hasta_adi from hastalar1
where hasta_adi='ahmet'
union all
select hasta_adi from hastalar2
where hasta_id between '10' and '20';
-------------MINUS fark(A/B gibi)----------------------------
select hasta_id,hasta_no,hasta_adi from hastalar1
where hasta_no<'300'
minus
select hasta_id,hasta_no,hasta_adi from hastalar2
where hasta_id between '10' and '20';
-------------------------------------------------------------
select hasta_id,hasta_no,hasta_adi from hastalar1
minus
select hasta_id,hasta_no,hasta_adi from hastalar2;
inner join = join
left outer join
right outer join
cross join
----------------------------------inner join = join--------------------------
select h.hasta_no,h.hasta_adi,k.klinik_adi from hastalar h , klinik k where h.klinik_id=k.klinik_id;
ile
select h.hasta_no,h.hasta_adi,k.klinik_adi from hastalar h inner join klinik k on(h.klinik_id=k.klinik_id);
ile
select h.hasta_no,h.hasta_adi,k.klinik_adi from hastalar h join klinik k on(h.klinik_id=k.klinik_id);
aynı sql sorgularıdır.her iki tabloda da ortak olan alanları getirir.
---------------------------------left outer join-------------------------------
insert into klinik values(4,'psikiyatri');
select * from klinik;
insert into hastalar(hasta_id,hasta_no,hasta_adi) values(6,500,'hasan');
select * from hastalar;
select h.hasta_no,h.hasta_adi,k.klinik_adi from hastalar h left outer join klinik k on(h.klinik_id=k.klinik_id);
soldaki tabloda(hastalar) olupta,sağdaki tabloda(klinik) olmayan kayıtları getirir.
----------------------------------right outer join-------------------------
left outer join 'in tersidir,yani;
sağdaki tabloda(klinik) olupta, soldaki tabloda(hastalar) olmayan kayıtları getirir.
select h.hasta_no,h.hasta_adi,k.klinik_adi from hastalar h right outer join klinik k on(h.klinik_id=k.klinik_id);
------------------------------------cross join------------------------------
Her iki tabloyu çapraz olarak birleştirir.
Yani, ilk tablodaki her bir satır için ikinci tablodaki her satır sonuç olarak döner.
burada ortak alanlar eşitlenmez,sadece tablolar belirtilir.
select h.hasta_no,h.hasta_adi,k.klinik_adi from hastalar h cross join klinik k;
-------------------------UNION VE UNION ALL------------------
UNION ve UNION ALL ifadeleri iki sorgu sonucunun birleştirilmesi için kullanılır.
Tek farkı, UNION mükerrer kayıtları getirmez, UNION ALL ise tüm kayıtları olduğu gibi listeler.
1-)İki tablonun sütun sayısı aynı olmalıdır.
2-)İlk tablodaki her sütunun veri tipi ikinci tabloda ona karşılık gelen sütunun veri tipiyle aynı olmalıdır.
3-)İki tablonun hiç biri ORDER BEY cümleciğiyle sıralanamaz.
select * from hastalar1;
select * from hastalar2;
delete from hastalar2;
insert into hastalar2 values(10,1500,'aaaaaaaaa',1);
insert into hastalar2 values(20,2000,'bbbbbbbbb',2);
select hasta_id,hasta_no,hasta_adi from hastalar1
where hasta_no<'300'
union
select hasta_id,hasta_no,hasta_adi from hastalar2
where hasta_id between '10' and '20';
---2 tane 'ahmet' kaydı olduğu halde union tekrarlarını getirmez---
select hasta_adi from hastalar1
where hasta_adi='ahmet'
union
select hasta_adi from hastalar2
where hasta_id between '10' and '20';
--------union all' u kullanırsak tüm tekrarları da getirir------------
select hasta_adi from hastalar1
where hasta_adi='ahmet'
union all
select hasta_adi from hastalar2
where hasta_id between '10' and '20';
-------------MINUS fark(A/B gibi)----------------------------
select hasta_id,hasta_no,hasta_adi from hastalar1
where hasta_no<'300'
minus
select hasta_id,hasta_no,hasta_adi from hastalar2
where hasta_id between '10' and '20';
-------------------------------------------------------------
select hasta_id,hasta_no,hasta_adi from hastalar1
minus
select hasta_id,hasta_no,hasta_adi from hastalar2;
V$ - DICTIONARY
select * from v$dbfile; // datafile' ların dizinini,file number'larını gösterir.
select * from v$controlfile; // kontrol file'ların dizinini,boyutunu gösterir.
select * from v$logfile; // log dosyalarının dizinini ve durumlarını gösterir.
select * from v$instance; // database'in durumunu gösterir.
SELECT FILE#, NAME, STATUS FROM V$DATAFILE; (datafile backubı alırken, datafile number'ları öğrenmek için)
select * from v$tablespace;
select name from v$datafile;
select name,log_mode from v$database; (archive modda olup olmadığını öğrenmek için) yada archive log list;
SELECT DATABASE_STATUS FROM V$INSTANCE;
select * from v$controlfile; // kontrol file'ların dizinini,boyutunu gösterir.
select * from v$logfile; // log dosyalarının dizinini ve durumlarını gösterir.
select * from v$instance; // database'in durumunu gösterir.
SELECT FILE#, NAME, STATUS FROM V$DATAFILE; (datafile backubı alırken, datafile number'ları öğrenmek için)
select * from v$tablespace;
select name from v$datafile;
select name,log_mode from v$database; (archive modda olup olmadığını öğrenmek için) yada archive log list;
SELECT DATABASE_STATUS FROM V$INSTANCE;
CHECK CONSTRAINT
-----------CHECK CONSTRAINT'İ İLE ŞART KOYMAK------------
ALTER TABLE hastalar ADD CONSTRAINT const_chk_maas CHECK (maas>0);
insert into hastalar values(9,550,'cemile',2,-40); // - değerler girilmez.
insert into hastalar values(9,550,'cemile',2,40,8); // araya , konulduğunda fazla alan girildiğini sanır.
insert into hastalar values(9,550,'cemile',2,'40,8'); // küsuratlı sayıları '' tek tırnak içinde belirtmemiz gerekir.
ALTER TABLE hastalar ADD CONSTRAINT const_chk_maas CHECK (maas>0);
insert into hastalar values(9,550,'cemile',2,-40); // - değerler girilmez.
insert into hastalar values(9,550,'cemile',2,40,8); // araya , konulduğunda fazla alan girildiğini sanır.
insert into hastalar values(9,550,'cemile',2,'40,8'); // küsuratlı sayıları '' tek tırnak içinde belirtmemiz gerekir.
SUBQUERY
-------------------------subquery (alt sorgu)--------------------------
select hasta_adi from hastalar where hasta_no>(select hasta_no from hastalar where hasta_adi='ali');
select hasta_adi from hastalar where hasta_no>(select hasta_no from hastalar where hasta_adi='ali');
SAYISAL FONKSİYONLAR
round() // bir sonrakine yuvarlar.
round (45.926,2) 45.93
trunc() // düzleme yapar.
trunc(45.926,2) 45,92
mod() // modunu alır.
mod(1600,300) 100
alter table hastalar add maas number(10,4);
update hastalar set maas='45,926' where hasta_id='1';
select maas,round(maas,2) "yuvarla" from hastalar;
select maas,trunc(maas,2) "düzle" from hastalar;
select hasta_no,mod(hasta_no,30) "modu" from hastalar;
round (45.926,2) 45.93
trunc() // düzleme yapar.
trunc(45.926,2) 45,92
mod() // modunu alır.
mod(1600,300) 100
alter table hastalar add maas number(10,4);
update hastalar set maas='45,926' where hasta_id='1';
select maas,round(maas,2) "yuvarla" from hastalar;
select maas,trunc(maas,2) "düzle" from hastalar;
select hasta_no,mod(hasta_no,30) "modu" from hastalar;
KARAKTER FONKSİYONLAR
select lower(hasta_adi) from hastalar1; // küçük harfe çevirir.
select upper(hasta_adi) from hastalar1; // büyük harfe çevirir.
select initcap(hasta_adi) from hastalar1; // ilk harfi büyük yapar.
select concat(h.hasta_adi,k.klinik_adi) "hasta ve klinigi" from hastalar h join klinik k on(h.klinik_id=k.klinik_id);
// ifadeleri birleştirir.
select substr(hasta_adi,2,5) from hastalar;
// 2 adet argümanı vardır.ilk argüman yeni stringin nereden başlayacağını belirtir,
ikinci argüman ise kaç adet karakteri alacağını belirtir.örnekte 2.karakterden itibaren 5 adet karakter alır.
select hasta_adi,length(hasta_adi) "uzunlugu" from hastalar; // karakter uzunluğunu verir.
select instr(hasta_adi,'m') from hastalar; // ikinci argümanda belirtilen karakterin kaçıncısı olduğunu verir.
select lpad(hasta_adi,10,'*') from hastalar; // 2.argümanda belirtilen karakter uzunluğu kadar olmak üzere
3.argümanda belirtilen karakteri sol tarafına ekler,boşluk karakteri de ekleyebiliriz.
select rpad(hasta_adi,10,'*') from hastalar; // sağ tarafına ekler.
select hasta_adi,replace(hasta_adi,'a','me') "yeni adi" from hastalar where hasta_id='1'; // 'a' gördüğü yeri 'me' yapar.
select hasta_adi,trim('a' from hasta_adi) "yeni adi" from hastalar where hasta_id='1'; // 'a' karakterini keser.
select upper(hasta_adi) from hastalar1; // büyük harfe çevirir.
select initcap(hasta_adi) from hastalar1; // ilk harfi büyük yapar.
select concat(h.hasta_adi,k.klinik_adi) "hasta ve klinigi" from hastalar h join klinik k on(h.klinik_id=k.klinik_id);
// ifadeleri birleştirir.
select substr(hasta_adi,2,5) from hastalar;
// 2 adet argümanı vardır.ilk argüman yeni stringin nereden başlayacağını belirtir,
ikinci argüman ise kaç adet karakteri alacağını belirtir.örnekte 2.karakterden itibaren 5 adet karakter alır.
select hasta_adi,length(hasta_adi) "uzunlugu" from hastalar; // karakter uzunluğunu verir.
select instr(hasta_adi,'m') from hastalar; // ikinci argümanda belirtilen karakterin kaçıncısı olduğunu verir.
select lpad(hasta_adi,10,'*') from hastalar; // 2.argümanda belirtilen karakter uzunluğu kadar olmak üzere
3.argümanda belirtilen karakteri sol tarafına ekler,boşluk karakteri de ekleyebiliriz.
select rpad(hasta_adi,10,'*') from hastalar; // sağ tarafına ekler.
select hasta_adi,replace(hasta_adi,'a','me') "yeni adi" from hastalar where hasta_id='1'; // 'a' gördüğü yeri 'me' yapar.
select hasta_adi,trim('a' from hasta_adi) "yeni adi" from hastalar where hasta_id='1'; // 'a' karakterini keser.
VIEW OLUŞTURMA VE SİLME
create or replace view MUAYENELER as
select h.hasta_no,h.hasta_adi,k.klinik_adi from hastalar h join klinik k
on(h.klinik_id=k.klinik_id);
select * from muayeneler;
grant select on MUAYENELER to ahmet;
conn ahmet
select * from orhan.muayeneler;
drop view muayeneler;
-------------------------------------------------------------------------------
select * from user_objects;
select h.hasta_no,h.hasta_adi,k.klinik_adi from hastalar h join klinik k
on(h.klinik_id=k.klinik_id);
select * from muayeneler;
grant select on MUAYENELER to ahmet;
conn ahmet
select * from orhan.muayeneler;
drop view muayeneler;
-------------------------------------------------------------------------------
select * from user_objects;
ROLE
-----rol oluşturma,rolü user'a atama,rolü role atama,rolü silme-----
create role YONETIM;
grant select on HASTALAR1 to YONETIM;
grant YONETIM to AHMET;
grant SORGU to YONETIM;
revoke SELECT on HASTALAR1 from YONETIM;
drop role YONETIM;
alter user ahmet default role none;
// ile ali'ye verilen tüm rolleri disable(pasif) edebiliriz.
alter user ahmet default role all;
// ile de ali'ye verilen tüm rolleri enable(aktif) ederiz.
create role YONETIM;
grant select on HASTALAR1 to YONETIM;
grant YONETIM to AHMET;
grant SORGU to YONETIM;
revoke SELECT on HASTALAR1 from YONETIM;
drop role YONETIM;
alter user ahmet default role none;
// ile ali'ye verilen tüm rolleri disable(pasif) edebiliriz.
alter user ahmet default role all;
// ile de ali'ye verilen tüm rolleri enable(aktif) ederiz.
SYSDATE KULLANIMI
alter table hastalar1 add tarihi date default sysdate;
select * from hastalar1;
select hasta_id,hasta_no,hasta_adi,klinik_id,y_tarihi,to_char(tarihi,'dd-mm-yyyy hh24:mi:ss') from hastalar1;
insert into hastalar1(hasta_id,hasta_no,hasta_adi,klinik_id,y_tarihi)
values(8,500,'cem',1,To_Date('04/08/2007 14:30:09','DD/MM/YYYY HH24:MI:SS'));
select hasta_id,hasta_no,hasta_adi,klinik_id,y_tarihi,to_char(tarihi,'dd-mm-yyyy hh24:mi:ss') from hastalar1;
select * from hastalar1;
select hasta_id,hasta_no,hasta_adi,klinik_id,y_tarihi,to_char(tarihi,'dd-mm-yyyy hh24:mi:ss') from hastalar1;
insert into hastalar1(hasta_id,hasta_no,hasta_adi,klinik_id,y_tarihi)
values(8,500,'cem',1,To_Date('04/08/2007 14:30:09','DD/MM/YYYY HH24:MI:SS'));
select hasta_id,hasta_no,hasta_adi,klinik_id,y_tarihi,to_char(tarihi,'dd-mm-yyyy hh24:mi:ss') from hastalar1;
22 Kasım 2007 Perşembe
TARIH FONKSIYONLARI
-----------tüm satırdaki verileri değiştirmek için-------------
update hastalar2 set hasta_id='8',hasta_no='500',hasta_adi='mehmet',
klinik_id='3' where hasta_id='3';
----------tüm sütundaki verilere aynı veriyi girmek için--------
update hastalar2 set klinik_id='2';
---------------------------------TARİH FONKSİYONU--------------
select * from hastalar1;
desc hastalar1;
alter table hastalar1 add y_tarihi date;
select * from hastalar1;
desc hastalar1;
update hastalar1 set y_tarihi='20/10/2007' where hasta_id='1';
update hastalar1 set y_tarihi='22.10.2007' where hasta_id='2';
update hastalar1 set y_tarihi=To_Date('26/10/2007 11:52:00','DD/MM/YYYY HH24:MI:SS') where hasta_id='7';
update hastalar1 set y_tarihi=To_Date('26/10/2007 09:30:00','DD/MM/YYYY HH24:MI:SS') where hasta_id='6';
select * from hastalar1;
select * from hastalar1 where y_tarihi between To_Date('26/10/2007 09:30:00','DD/MM/YYYY HH24:MI:SS')
and To_Date('26/10/2007 11:52:00','DD/MM/YYYY HH24:MI:SS');
select * from hastalar1 where y_tarihi=To_Date('26/10/2007 09:30:00','DD/MM/YYYY HH24:MI:SS');
insert into hastalar1 values(7,400,'emre',2,To_Date('25/10/2007 11:52:00','DD/MM/YYYY HH24:MI:SS'));
select * from hastalar1;
SELECT SYSDATE tarih FROM DUAL;
SELECT CURRENT_TIMESTAMP full_tarih FROM DUAL;
SELECT TO_CHAR(CURRENT_DATE, 'DD-MON-YYYY HH:MI:SS') full_tarih FROM DUAL;
SELECT TO_CHAR(SYSDATE, 'DD-MON-YYYY') tarih FROM DUAL;
SELECT TO_CHAR(SYSDATE, 'DD-MON-YYYY HH24:MI:SS') tarih FROM DUAL;
SELECT TO_CHAR(y_tarihi,'MONTH YYYY') AS TARIH FROM hastalar1;
SELECT TO_CHAR(y_tarihi,'DD-MON-YYYY HH24:MI:SS') AS TARIH FROM hastalar1;
select hasta_id,hasta_no,hasta_adi,klinik_id,TO_CHAR(y_tarihi,'MONTH YYYY') AS TARIH FROM hastalar1;
select hasta_id,hasta_no,hasta_adi,klinik_id,TO_CHAR(y_tarihi,'DD-MON-YYYY HH24:MI:SS') AS TARIH FROM hastalar1;
-------'fm' başında sıfır varsa atıyor-------------
select hasta_id,hasta_no,hasta_adi,klinik_id,TO_CHAR(y_tarihi,'fmDD-MON-YYYY HH24:MI:SS') AS TARIH FROM hastalar1;
select hasta_id,hasta_no,hasta_adi,klinik_id,TO_CHAR(y_tarihi,'DD-MM-YYYY HH24:MI:SS') AS TARIH FROM hastalar1;
select hasta_id,hasta_no,hasta_adi,klinik_id,TO_CHAR(y_tarihi,'DD-MM-YYYY HH24:MI:SS','nls_date_language=turkish') AS TARIH FROM hastalar1;
----eğer işletim sistemi dil ayarımız türkçe ise ve biz ingilizce dil formatında çıktı istiyorsak---------------
select hasta_id,hasta_no,hasta_adi,klinik_id,TO_CHAR(y_tarihi,'MONTH YYYY','nls_date_language=english') AS TARIH FROM hastalar1;
--------eğer işletim sistemi dil ayarımız ingilizce ise ve biz türkçe dil formatında çıktı istiyorsak------------
select hasta_id,hasta_no,hasta_adi,klinik_id,TO_CHAR(y_tarihi,'MONTH YYYY','nls_date_language=turkish') AS TARIH FROM hastalar1;
SELECT SYSDATE + 1 FROM DUAL
Server üzerindeki tarih bilgisine bir gün ekler.
SELECT SYSDATE - 1 FROM DUAL
Server üzerindeki tarih bilgisinden bir gün azaltır.
SELECT add_months(SYSDATE, 1) FROM DUAL
Server üzerindeki tarih bilgisi üzerine bir ay ekleyip bilgi gösterir.
SELECT sessiontimezone, current_date FROM DUAL
Server üzerindeki zaman dilimini gösterir.
ALTER SESSION SET TIME_ZONE = '+2:0';
Server üzerindeki zaman dilimini değiştirir.
ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY HH24:MI:SS'
Server üzerindeki tarih formatını değiştirir
SELECT GREATEST(sysdate, sysdate+15, sysdate-15) FROM DUAL
verilen 3 tarih arasındaki en büyük tarihi sonuç olarak gösterir.
SELECT LAST_DAY(sysdate) FROM DUAL
SELECT TO_CHAR(TRUNC(add_months(SYSDATE, 1),'MM')-1, 'DD/MON/YYYY') FROM DUAL
Verilen tarihteki ayın son gün bilgisini listeler.
SELECT least(sysdate+30, sysdate+15, sysdate) FROM DUAL
Verilen tarihler arasındaki en küçük tarih bilgisini listeler.
SELECT MONTHS_BETWEEN(SYSDATE+120, sysdate) FROM DUAL
İki tarih arasındaki ay farkı bilgisini listeler.
SELECT NEXt_DAY(SYSDATE, 'pazartesi') FROM DUAL
Server tarihinden sonraki ilk pazartesi gününün tarihini listeler. (Gün bilgisi Oracle server dil bilgisine göre değişir ingilizce kullanıyorsanız Pazartesi yerine "MON" yazmalısınız)
SELECT TO_CHAR(TRUNC(SYSDATE, 'MM'), 'DD-MON-YYYY HH:MI:SS') FROM DUAL
Verdiğiniz tarihteki ayın ilk gününü listeler.
'MM' yerine 'MON' yazarsanız da aynı sonucu alırsınız.
'YYYY' veya 'YEAR' yazarsanız yılın ilk gün bilgisini listeler.
D Haftanın Günü (3)
DAY Haftanın Gün adı , 9 karakter
DD Ayın kaçıncı günü (30)
DDD Yılın kaçıncı günü (334)
DY Kısaltılmış gün (ÇAR)
HH 1-12 tipinde saati döndürür (12)
HH12 Same as HH (12)
HH24 24 dilimde saaati döndürür (12) AM - PM e göre 24
IW Yılın kaçıncı haftası olduğunu döndürür (48)
IYYY 4 haneli yılı döndürür (2005)
IYY 3 haneli olarka yılı döndürür (005)
IY 2 Haneli olarak yılı döndürür (05)
I yılın son hanesini döndürür (5)
MI Dakikayı verir (0-59) (35)
MM Ayı döndürür (11)
MON Ay adını kısaltarak döndürür (KAS) Türkiye set edilmişse
MONTH Ay adını döndürür (ARALIK) Türkiye set edilmişse!..
RM Roma Rakamı ile ayı döndürür (XI)
RR ? (05) yılı döndürdü
RRRR ? (2005) yılı döndürdü
SS Saniye (35)
SSSSS Seconds past midnight
TS Kısa Tarih Formatı verir
TZD Daylight savings information
TZH Time zone hour
TZM Time zone minute
WW Yılın haftasını döndürür
W Ayın kaçıncı haftası olduğunu döndürür
X Local radix character
YYYY ??? YEAR Okunuşu ile yılı yazar Two Thousand Five )
SYEAR Two Thousand Five
YYY 005
YY 05
Y 5
----------------------spool (sql scriptini kaydetme)---------------
spool c:\sonuc.txt;
select * from hastalar1;
spool off;
-------------------------------in & not in ------------------------------
select * from hastalar1 where hasta_adi in('ali','ayse','emre');
select * from hastalar1 where hasta_adi not in('ahmet','mustafa');
select hasta_id,hasta_no "eski_hasta_no",hasta_no*10 "yeni_hasta_no",hasta_adi,klinik_id from hastalar1;
update hastalar2 set hasta_id='8',hasta_no='500',hasta_adi='mehmet',
klinik_id='3' where hasta_id='3';
----------tüm sütundaki verilere aynı veriyi girmek için--------
update hastalar2 set klinik_id='2';
---------------------------------TARİH FONKSİYONU--------------
select * from hastalar1;
desc hastalar1;
alter table hastalar1 add y_tarihi date;
select * from hastalar1;
desc hastalar1;
update hastalar1 set y_tarihi='20/10/2007' where hasta_id='1';
update hastalar1 set y_tarihi='22.10.2007' where hasta_id='2';
update hastalar1 set y_tarihi=To_Date('26/10/2007 11:52:00','DD/MM/YYYY HH24:MI:SS') where hasta_id='7';
update hastalar1 set y_tarihi=To_Date('26/10/2007 09:30:00','DD/MM/YYYY HH24:MI:SS') where hasta_id='6';
select * from hastalar1;
select * from hastalar1 where y_tarihi between To_Date('26/10/2007 09:30:00','DD/MM/YYYY HH24:MI:SS')
and To_Date('26/10/2007 11:52:00','DD/MM/YYYY HH24:MI:SS');
select * from hastalar1 where y_tarihi=To_Date('26/10/2007 09:30:00','DD/MM/YYYY HH24:MI:SS');
insert into hastalar1 values(7,400,'emre',2,To_Date('25/10/2007 11:52:00','DD/MM/YYYY HH24:MI:SS'));
select * from hastalar1;
SELECT SYSDATE tarih FROM DUAL;
SELECT CURRENT_TIMESTAMP full_tarih FROM DUAL;
SELECT TO_CHAR(CURRENT_DATE, 'DD-MON-YYYY HH:MI:SS') full_tarih FROM DUAL;
SELECT TO_CHAR(SYSDATE, 'DD-MON-YYYY') tarih FROM DUAL;
SELECT TO_CHAR(SYSDATE, 'DD-MON-YYYY HH24:MI:SS') tarih FROM DUAL;
SELECT TO_CHAR(y_tarihi,'MONTH YYYY') AS TARIH FROM hastalar1;
SELECT TO_CHAR(y_tarihi,'DD-MON-YYYY HH24:MI:SS') AS TARIH FROM hastalar1;
select hasta_id,hasta_no,hasta_adi,klinik_id,TO_CHAR(y_tarihi,'MONTH YYYY') AS TARIH FROM hastalar1;
select hasta_id,hasta_no,hasta_adi,klinik_id,TO_CHAR(y_tarihi,'DD-MON-YYYY HH24:MI:SS') AS TARIH FROM hastalar1;
-------'fm' başında sıfır varsa atıyor-------------
select hasta_id,hasta_no,hasta_adi,klinik_id,TO_CHAR(y_tarihi,'fmDD-MON-YYYY HH24:MI:SS') AS TARIH FROM hastalar1;
select hasta_id,hasta_no,hasta_adi,klinik_id,TO_CHAR(y_tarihi,'DD-MM-YYYY HH24:MI:SS') AS TARIH FROM hastalar1;
select hasta_id,hasta_no,hasta_adi,klinik_id,TO_CHAR(y_tarihi,'DD-MM-YYYY HH24:MI:SS','nls_date_language=turkish') AS TARIH FROM hastalar1;
----eğer işletim sistemi dil ayarımız türkçe ise ve biz ingilizce dil formatında çıktı istiyorsak---------------
select hasta_id,hasta_no,hasta_adi,klinik_id,TO_CHAR(y_tarihi,'MONTH YYYY','nls_date_language=english') AS TARIH FROM hastalar1;
--------eğer işletim sistemi dil ayarımız ingilizce ise ve biz türkçe dil formatında çıktı istiyorsak------------
select hasta_id,hasta_no,hasta_adi,klinik_id,TO_CHAR(y_tarihi,'MONTH YYYY','nls_date_language=turkish') AS TARIH FROM hastalar1;
SELECT SYSDATE + 1 FROM DUAL
Server üzerindeki tarih bilgisine bir gün ekler.
SELECT SYSDATE - 1 FROM DUAL
Server üzerindeki tarih bilgisinden bir gün azaltır.
SELECT add_months(SYSDATE, 1) FROM DUAL
Server üzerindeki tarih bilgisi üzerine bir ay ekleyip bilgi gösterir.
SELECT sessiontimezone, current_date FROM DUAL
Server üzerindeki zaman dilimini gösterir.
ALTER SESSION SET TIME_ZONE = '+2:0';
Server üzerindeki zaman dilimini değiştirir.
ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY HH24:MI:SS'
Server üzerindeki tarih formatını değiştirir
SELECT GREATEST(sysdate, sysdate+15, sysdate-15) FROM DUAL
verilen 3 tarih arasındaki en büyük tarihi sonuç olarak gösterir.
SELECT LAST_DAY(sysdate) FROM DUAL
SELECT TO_CHAR(TRUNC(add_months(SYSDATE, 1),'MM')-1, 'DD/MON/YYYY') FROM DUAL
Verilen tarihteki ayın son gün bilgisini listeler.
SELECT least(sysdate+30, sysdate+15, sysdate) FROM DUAL
Verilen tarihler arasındaki en küçük tarih bilgisini listeler.
SELECT MONTHS_BETWEEN(SYSDATE+120, sysdate) FROM DUAL
İki tarih arasındaki ay farkı bilgisini listeler.
SELECT NEXt_DAY(SYSDATE, 'pazartesi') FROM DUAL
Server tarihinden sonraki ilk pazartesi gününün tarihini listeler. (Gün bilgisi Oracle server dil bilgisine göre değişir ingilizce kullanıyorsanız Pazartesi yerine "MON" yazmalısınız)
SELECT TO_CHAR(TRUNC(SYSDATE, 'MM'), 'DD-MON-YYYY HH:MI:SS') FROM DUAL
Verdiğiniz tarihteki ayın ilk gününü listeler.
'MM' yerine 'MON' yazarsanız da aynı sonucu alırsınız.
'YYYY' veya 'YEAR' yazarsanız yılın ilk gün bilgisini listeler.
D Haftanın Günü (3)
DAY Haftanın Gün adı , 9 karakter
DD Ayın kaçıncı günü (30)
DDD Yılın kaçıncı günü (334)
DY Kısaltılmış gün (ÇAR)
HH 1-12 tipinde saati döndürür (12)
HH12 Same as HH (12)
HH24 24 dilimde saaati döndürür (12) AM - PM e göre 24
IW Yılın kaçıncı haftası olduğunu döndürür (48)
IYYY 4 haneli yılı döndürür (2005)
IYY 3 haneli olarka yılı döndürür (005)
IY 2 Haneli olarak yılı döndürür (05)
I yılın son hanesini döndürür (5)
MI Dakikayı verir (0-59) (35)
MM Ayı döndürür (11)
MON Ay adını kısaltarak döndürür (KAS) Türkiye set edilmişse
MONTH Ay adını döndürür (ARALIK) Türkiye set edilmişse!..
RM Roma Rakamı ile ayı döndürür (XI)
RR ? (05) yılı döndürdü
RRRR ? (2005) yılı döndürdü
SS Saniye (35)
SSSSS Seconds past midnight
TS Kısa Tarih Formatı verir
TZD Daylight savings information
TZH Time zone hour
TZM Time zone minute
WW Yılın haftasını döndürür
W Ayın kaçıncı haftası olduğunu döndürür
X Local radix character
YYYY ??? YEAR Okunuşu ile yılı yazar Two Thousand Five )
SYEAR Two Thousand Five
YYY 005
YY 05
Y 5
----------------------spool (sql scriptini kaydetme)---------------
spool c:\sonuc.txt;
select * from hastalar1;
spool off;
-------------------------------in & not in ------------------------------
select * from hastalar1 where hasta_adi in('ali','ayse','emre');
select * from hastalar1 where hasta_adi not in('ahmet','mustafa');
select hasta_id,hasta_no "eski_hasta_no",hasta_no*10 "yeni_hasta_no",hasta_adi,klinik_id from hastalar1;
TABLO AKTARMA-DATABASE LINK
- sqlplus'tan 'exit;' ile çıkıldığında otomatikmen commit edilir.
------------tablonun tüm içeriğini(kayıtlarını) silmek için------------
-truncate table hastalar2;
-----aynı databasedeki bir tablodan diğerine veri aktarımı--------
birinci tablomuz oluşturulur.
CREATE TABLE hastalar2 (hasta_id NUMBER(4), hasta_no NUMBER(4), hasta_adi VARCHAR2(15) NOT NULL, klinik_id NUMBER(4),CONSTRAINT const_uq_hasta_no2 UNIQUE(hasta_no),CONSTRAINT const_fk_klinik_id2 FOREIGN KEY(klinik_id) REFERENCES klinik(klinik_id),CONSTRAINT const_pk_hasta_id2 PRIMARY KEY(hasta_id));
veriler girilir.
insert into hastalar2 values(1,100,'ahmet',3);
select * from hastalar2;
'hasta_kimlik' adında ikinci tablomuzu oluşturduk.
CREATE TABLE hasta_kimlik (id NUMBER(6), no NUMBER(4), adi VARCHAR2(10) NOT NULL, k_id NUMBER(4),CONSTRAINT const_uq_no UNIQUE(no),CONSTRAINT const_fk_k_id FOREIGN KEY(k_id) REFERENCES klinik(klinik_id),CONSTRAINT const_pk_id PRIMARY KEY(id));
tablomuza henüz veri girilmedi.
select * from hasta_kimlik;
insert into hasta_kimlik (id,no,adi,k_id)select hasta_id,hasta_no,hasta_adi,klinik_id from hastalar2;
------eğer sadece bazı alanlar getirilecekse-----------------
insert into hasta_kimlik (id,adi)select hasta_id,hasta_adi from hastalar1;
---------sütundaki tüm verileri silmek için----------------
update hastalar1 set hasta_no='';
---------belli satırlar arasında kalan sütun verilerini silmek için----
update hastalar1 set hasta_no='' where hasta_id between '1' and '4';
-----farklı databasedeki bir tablodan diğerine veri aktarımı----
insert into orhan.hasta_kimlik@orcl (id,no,adi,k_id)select hasta_id,hasta_no,hasta_adi,klinik_id from ahmet.hastalar2@local where hasta_id<100;
burada 'local' database link adıdır.
----------200710 gibi hasta_id'ye 2007 ilavesi--------------
insert into orhan.hasta_kimlik@orcl (id,no,adi,k_id) select 2007hasta_id,hasta_no,hasta_adi,klinik_id from ahmet.hastalar2@local where hasta_id<100;
------------aktarma tarihi + sysdate--------------------------------------
insert into orhan.hasta_kimlik@orcl (id,no,adi,k_id,kullanici)select 2007hasta_id,hasta_no,hasta_adi,klinik_id,'aktarma tarihi 'sysdate from ahmet.hastalar2@local where hasta_id<100;
-----------------database link oluşturma---------------------------------
CREATE DATABASE LINK local CONNECT TO ahmet IDENTIFIED BY o USING 'orcl2';
-----------drop database link-------------------------------
drop [public] database link link_adi;
--------tüm database linkleri görmek için--------------------
select * from all_db_links;
------------tablonun tüm içeriğini(kayıtlarını) silmek için------------
-truncate table hastalar2;
-----aynı databasedeki bir tablodan diğerine veri aktarımı--------
birinci tablomuz oluşturulur.
CREATE TABLE hastalar2 (hasta_id NUMBER(4), hasta_no NUMBER(4), hasta_adi VARCHAR2(15) NOT NULL, klinik_id NUMBER(4),CONSTRAINT const_uq_hasta_no2 UNIQUE(hasta_no),CONSTRAINT const_fk_klinik_id2 FOREIGN KEY(klinik_id) REFERENCES klinik(klinik_id),CONSTRAINT const_pk_hasta_id2 PRIMARY KEY(hasta_id));
veriler girilir.
insert into hastalar2 values(1,100,'ahmet',3);
select * from hastalar2;
'hasta_kimlik' adında ikinci tablomuzu oluşturduk.
CREATE TABLE hasta_kimlik (id NUMBER(6), no NUMBER(4), adi VARCHAR2(10) NOT NULL, k_id NUMBER(4),CONSTRAINT const_uq_no UNIQUE(no),CONSTRAINT const_fk_k_id FOREIGN KEY(k_id) REFERENCES klinik(klinik_id),CONSTRAINT const_pk_id PRIMARY KEY(id));
tablomuza henüz veri girilmedi.
select * from hasta_kimlik;
insert into hasta_kimlik (id,no,adi,k_id)select hasta_id,hasta_no,hasta_adi,klinik_id from hastalar2;
------eğer sadece bazı alanlar getirilecekse-----------------
insert into hasta_kimlik (id,adi)select hasta_id,hasta_adi from hastalar1;
---------sütundaki tüm verileri silmek için----------------
update hastalar1 set hasta_no='';
---------belli satırlar arasında kalan sütun verilerini silmek için----
update hastalar1 set hasta_no='' where hasta_id between '1' and '4';
-----farklı databasedeki bir tablodan diğerine veri aktarımı----
insert into orhan.hasta_kimlik@orcl (id,no,adi,k_id)select hasta_id,hasta_no,hasta_adi,klinik_id from ahmet.hastalar2@local where hasta_id<100;
burada 'local' database link adıdır.
----------200710 gibi hasta_id'ye 2007 ilavesi--------------
insert into orhan.hasta_kimlik@orcl (id,no,adi,k_id) select 2007hasta_id,hasta_no,hasta_adi,klinik_id from ahmet.hastalar2@local where hasta_id<100;
------------aktarma tarihi + sysdate--------------------------------------
insert into orhan.hasta_kimlik@orcl (id,no,adi,k_id,kullanici)select 2007hasta_id,hasta_no,hasta_adi,klinik_id,'aktarma tarihi 'sysdate from ahmet.hastalar2@local where hasta_id<100;
-----------------database link oluşturma---------------------------------
CREATE DATABASE LINK local CONNECT TO ahmet IDENTIFIED BY o USING 'orcl2';
-----------drop database link-------------------------------
drop [public] database link link_adi;
--------tüm database linkleri görmek için--------------------
select * from all_db_links;
21 Kasım 2007 Çarşamba
ALTER TABLESPACE-DATAFILE
----------user'in sahip olduğu rollerin listesini verir----------------
select * from user_role_privs;
-------------------tüm user'ları görmek için-------------------
select username from dba_users;
----------------------------ALTER TABLESPACE--------
------------------------tablespace'in adını değiştirir-----------
ALTER TABLESPACE test RENAME TO test0;
---------------------tablespace'e datafile eklemek--------------
alter tablespace test add datafile 'D:\oracle\product\10.2.0\oradata\orcl\test2.dbf'size 10M
AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED;
-------------tablespace'i 20mb olarak artırır-------------------------
ALTER TABLESPACE test AUTOEXTEND ON NEXT 20M MAXSIZE UNLIMITED;
--tablespacedeki tüm datafile'lerin adını ve büyüklüğünü verir-----
SELECT file_name, bytes FROM sys.dba_data_files WHERE tablespace_name = 'TEST';
select file_name,file_id,tablespace_name,bytes,status,online_status from sys.dba_data_files where tablespace_name='test'
------------tablespace'i offline ve online duruma getirme------
alter tablespace test offline;
------------- select * from hastalar;
alter tablespace test online;----------------------------
------------datafile'ı offline ve online duruma getirme-------
ALTER DATABASE DATAFILE 'D:\oracle\product\10.2.0\oradata\orcl\test2.dbf' offline;
shutdown immediate;
startup mount;
ALTER DATABASE DATAFILE 'D:\oracle\product\10.2.0\oradata\orcl\test2.dbf' online;
--------datafile'ın adını değiştirir-----------------------
sql>shutdown immediate;
manuel olarak,dizindeki 'test' datafile'ının adını değiştiriyoruz.
sql>HOST MOVE D:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL2\TEST.DBF D:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL2\INTERBASE.DBF
SQL>alter database rename file 'D:\oracle\product\10.2.0\oradata\orcl2\test.dbf' to 'D:\oracle\product\10.2.0\oradata\orcl2\INTERBASE.dbf';
sql>alter database open;
---------------------------------------------------
ALTER TABLESPACE test DROP DATAFILE 'D:\oracle\product\10.2.0\oradata\orcl\test2.dbf';
---------tabloyu başka tablespace'e taşıma---------
ALTER TABLE table_name MOVE TABLESPACE tablespace_name
ALTER TABLE orhan.deneme MOVE TABLESPACE users
select * from user_role_privs;
-------------------tüm user'ları görmek için-------------------
select username from dba_users;
----------------------------ALTER TABLESPACE--------
------------------------tablespace'in adını değiştirir-----------
ALTER TABLESPACE test RENAME TO test0;
---------------------tablespace'e datafile eklemek--------------
alter tablespace test add datafile 'D:\oracle\product\10.2.0\oradata\orcl\test2.dbf'size 10M
AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED;
-------------tablespace'i 20mb olarak artırır-------------------------
ALTER TABLESPACE test AUTOEXTEND ON NEXT 20M MAXSIZE UNLIMITED;
--tablespacedeki tüm datafile'lerin adını ve büyüklüğünü verir-----
SELECT file_name, bytes FROM sys.dba_data_files WHERE tablespace_name = 'TEST';
select file_name,file_id,tablespace_name,bytes,status,online_status from sys.dba_data_files where tablespace_name='test'
------------tablespace'i offline ve online duruma getirme------
alter tablespace test offline;
------------- select * from hastalar;
alter tablespace test online;----------------------------
------------datafile'ı offline ve online duruma getirme-------
ALTER DATABASE DATAFILE 'D:\oracle\product\10.2.0\oradata\orcl\test2.dbf' offline;
shutdown immediate;
startup mount;
ALTER DATABASE DATAFILE 'D:\oracle\product\10.2.0\oradata\orcl\test2.dbf' online;
--------datafile'ın adını değiştirir-----------------------
sql>shutdown immediate;
manuel olarak,dizindeki 'test' datafile'ının adını değiştiriyoruz.
sql>HOST MOVE D:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL2\TEST.DBF D:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL2\INTERBASE.DBF
SQL>alter database rename file 'D:\oracle\product\10.2.0\oradata\orcl2\test.dbf' to 'D:\oracle\product\10.2.0\oradata\orcl2\INTERBASE.dbf';
sql>alter database open;
---------------------------------------------------
ALTER TABLESPACE test DROP DATAFILE 'D:\oracle\product\10.2.0\oradata\orcl\test2.dbf';
---------tabloyu başka tablespace'e taşıma---------
ALTER TABLE table_name MOVE TABLESPACE tablespace_name
ALTER TABLE orhan.deneme MOVE TABLESPACE users
PURGE-DROP-ALTER TABLE
select * from user_constraints where constraint_name like '%const_pk_hasta_id%';
select * from user_constraints where constraint_name like '%SYS_C009922%';
select * from user_constraints where constraint_name like '%const_pk_klinik_id%';
---------------------------------dual----------------------------
select user from dual;
select sysdate from dual;
---------sildiğimiz tablo ve indexleri (constraintleri) listeler------
select object_name,original_name,operation,type,ts_name from recyclebin;
--------sildiğimiz tabloları(çöp kutusunda olanları) listeler------
show recyclebin;
--------------çöp kutusundaki tabloyu silmek için-----
PURGE TABLE hastalar;
--çöp kutusundaki ,belirtilen tablespace'e ait objelerin tümünü siler--
PURGE TABLESPACE test;
--çöp kutusundaki herşeyi siler(hangi tablespace'e ait olursa olsun)--
PURGE RECYCLEBIN;
---tabloyu çöp kutusuna göndermeden tamamen silmek için-----
DROP TABLE hasta PURGE;
not: 'flashback table ...' komutu ile kurtardığımız tablolar çöp kutusundan(recyclebin) geri getirilir.(flashback table klinik to before drop;)
ALTER SYSTEM SET recyclebin = ON;
ALTER SYSTEM SET recyclebin = OFF;
-----------------alter table-----------------------
ALTER TABLE hastalar1 ADD hasta_soyadi VARCHAR2(15)
ALTER TABLE hastalar1 MODIFY hasta_soyadi VARCHAR2(25)
ALTER TABLE hastalar1 RENAME COLUMN hasta_soyadi TO soyadi;
ALTER TABLE hastalar1 RENAME TO hasta;
ALTER TABLE hastalar1 DROP COLUMN soyadi;
ALTER TABLE hastalar1 DROP (klinik_id, hasta_adi);
ALTER TABLE hastaADD CONSTRAINT const_pk_hasta PRIMARY KEY (hasta_id);
ALTER TABLE hastaADD CONSTRAINT const_fk_hasta FOREIGN KEY (klinik_id)
REFERENCES klinik (klinik_id);
ALTER TABLE hastaADD CONSTRAINT const_uq_hasta UNIQUE (hasta_soyadi);
ALTER TABLE hasta DROP CONSTRAINT const_pk_hasta_id1
------------kullanıcının tüm tablolarını gösterir------
select * from tab;
------------partition ve subpartition ekleme---------------
http://apunhiran.blogspot.com/2009/05/oracle-partitioning-add-partition.html
select * from user_constraints where constraint_name like '%SYS_C009922%';
select * from user_constraints where constraint_name like '%const_pk_klinik_id%';
---------------------------------dual----------------------------
select user from dual;
select sysdate from dual;
---------sildiğimiz tablo ve indexleri (constraintleri) listeler------
select object_name,original_name,operation,type,ts_name from recyclebin;
--------sildiğimiz tabloları(çöp kutusunda olanları) listeler------
show recyclebin;
--------------çöp kutusundaki tabloyu silmek için-----
PURGE TABLE hastalar;
--çöp kutusundaki ,belirtilen tablespace'e ait objelerin tümünü siler--
PURGE TABLESPACE test;
--çöp kutusundaki herşeyi siler(hangi tablespace'e ait olursa olsun)--
PURGE RECYCLEBIN;
---tabloyu çöp kutusuna göndermeden tamamen silmek için-----
DROP TABLE hasta PURGE;
not: 'flashback table ...' komutu ile kurtardığımız tablolar çöp kutusundan(recyclebin) geri getirilir.(flashback table klinik to before drop;)
ALTER SYSTEM SET recyclebin = ON;
ALTER SYSTEM SET recyclebin = OFF;
-----------------alter table-----------------------
ALTER TABLE hastalar1 ADD hasta_soyadi VARCHAR2(15)
ALTER TABLE hastalar1 MODIFY hasta_soyadi VARCHAR2(25)
ALTER TABLE hastalar1 RENAME COLUMN hasta_soyadi TO soyadi;
ALTER TABLE hastalar1 RENAME TO hasta;
ALTER TABLE hastalar1 DROP COLUMN soyadi;
ALTER TABLE hastalar1 DROP (klinik_id, hasta_adi);
ALTER TABLE hastaADD CONSTRAINT const_pk_hasta PRIMARY KEY (hasta_id);
ALTER TABLE hastaADD CONSTRAINT const_fk_hasta FOREIGN KEY (klinik_id)
REFERENCES klinik (klinik_id);
ALTER TABLE hastaADD CONSTRAINT const_uq_hasta UNIQUE (hasta_soyadi);
ALTER TABLE hasta DROP CONSTRAINT const_pk_hasta_id1
------------kullanıcının tüm tablolarını gösterir------
select * from tab;
------------partition ve subpartition ekleme---------------
http://apunhiran.blogspot.com/2009/05/oracle-partitioning-add-partition.html
SQL (STRUCTURED QUERY LANGUAGE-YAPISAL SORGULAMA DİLİ)
Yapısal Sorgulama Dili olan SQL, ilişkisel veritabanlarındaki bilgileri sorgulamak için standart kullanımı olan bir dildir. Standart bir dil olmasına karşılık, çeşitli veritabanlarında SQL kullanımları arasında farklılıklar vardır. SQL komutları ile, tablolara yeni kayıt girme, varolan kayıtları sorgulama (arama ve listeleme), varolan bilgileri değiştirme ve varolan kayıtları silme işlemleri yapılabilir.
Üzerinde sql komutlarını uygulayacağımız, örnek olarak klinik ve hastalar tablosundan birkaç kayıt verilsin.Klinik tablosundaki alan isimleri ve örnek veriler;
klinik_id klinik_adi
--------- -----------
1 dahiliye
2 kbb
3 göz
4 ortopedi
hastalar tablosundaki alan isimleri ve örnek veriler;
hasta_id hasta_no hasta_adi klinik_id
-------- --------- --------- ---------
1 100 ahmet 3
2 185 mustafa 2
3 210 ali 1
4 240 ayse 1
5 250 ahmet 3
Bu noktadan sonraki örnekleri yukarıdaki değerleri göz önünde tutarak inceleyiniz.
A-SQL FONKSİYONLARISQL’de kullanılan bazı fonksiyonlar vardır, bu fonksiyonlar ekrana sadece tek değer görüntülerler.
SUM([DISTINCT] alan_adi) Belirtilen alan için toplam fonksiyonu (sayısal alanlarda) COUNT(*) Toplam kayıt sayısı COUNT(DISTINCT alan_adi) Belirtilen alana göre farklı olan kayıtların sayısıMAX([DISTINCT] alan_adi) Belirtilen alanda en büyük değerMIN(DISTINCT] alan_adi) Belirtilen alanda en küçük değer AVG([DISTINCT] alan_adi) Belirtilen alanda ortalama değeri. DISTINCT parametresi ile belirtilen alanda bulunan bilgilerden aynı olanlarından sadece birinin seçilmesini sağlar.
SELECT COUNT(*) FROM hastalarSonucunda ekrana gelecek kayıt sayısı 5 dir.
SELECT DISTINCT klinik_id FROM hastalar
Tekrar eden kayıtlardan birer tane listelenir.
klinik_id
---------
3
2
1
SELECT COUNT(DISTINCT klinik_id) FROM hastalar
Sql ifadesinde ekrana gelecek kayıt sayısı 3 olacaktır.
SELECT MAX(hasta_no) FROM hastalarEn büyük hasta numarası, ekrana 250 olarak görüntüler. En büyük değer kaç tane olursa olsun bir tanesi görüntülenir.
SELECT SUM(hasta_no) FROM hastalarhasta numaralarının toplamını ekrana verecektir.
B-SORGULAMA
SELECT hasta_no*10 FROM hastalar
hastalar tablosundaki tüm hastaların hasta numaralarının 10 ile çarpımını ekrana görüntüleyecektir. Burada hasta numaralarının 10 ile çarpımı sadece ekrana görüntülenecek tabloda ise değişmeyecektir.
SELECT * FROM hastalar
hastalar tablosundaki bütün alanların içeriklerini ekrana görüntüleyecektir.
SELECT * FROM hastalar WHERE hasta_adi=’ahmet’
Hasta adı ahmet olan kayıtları ekrana getirecektir.tablomuzda 2 tane ahmet adı olduğu için 2 kayıt ekrana gelecektir.
SELECT * FROM hastalar ORDER BY hasta_adi
Tabloyu Hasta adına göre A’dan Z’ye sıralar.
SELECT * FROM hastalar ORDER BY hasta_adi DESC
Tabloyu Hasta adına göre Z’den A’ya sıralar.
SELECT hasta_adi FROM hastalar WHERE hasta_adi IN (‘ali’,’ayse’)hastalar tablosunda hasta_adi alanında içinde ali ve ayşe olanları listeler.
SELECT * FROM hastalar WHERE hasta_no IS NULL
hasta_no alanı boş olan kayıtları listeler.
SELECT * FROM hastalar WHERE hasta_no IS NOT NULL
hasta_no alanı boş olmayan kayıtları listeler.
SELECT hasta_no,hasta_adi FROM hastalar WHERE hasta_adi LIKE ‘a%’Adı ‘a’ ile başlayan kayıtların hasta no ve adlarını listeler.
SELECT hasta_no,hasta_adi FROM hastalar WHERE hasta_adi LIKE ‘%me%’hasta_adi alanında içinde ‘me’ olan kayıtların hasta no ve adlarını listeler.
SELECT hasta_no,hasta_adi FROM hastalar WHERE hasta_adi LIKE ‘%a’Adı ‘a’ ile biten kayıtların hasta no ve adlarını listeler.
SELECT alan_adi FROM tablo1,tablo2 WHERE koşullarBirden fazla tablodan aynı anda bilgi getirilmesi gerektiğinde, ortak alanlar üzerinden birleştirme işlemleri yapılır. Birleştirme işlemi koşullar bölümünde yapılır, ortak olan alanlar eşleştirilir.
SELECT h.hasta_no,h.hasta_adi,k.klinik_adi FROM hastalar h,klinik k
WHERE h.klinik_id=k.klinik_id and k.klinik_id=’2’
Klinik id’si 2 olan hastanın no’sunu,adını ve klinik adını ekrana getirir, klinik tablosunda olan klinik_adi alanını da hastalar tablosundaki diğer alanlar gibi ekrana getirmek istiyorsak, bu klinik tablosu ile hastalar tablosunu ortak alan üzerinde birleştirmemiz gerekir. Burada ‘h’ hastalar tablosuna, ‘k’ klinik tablosuna verilmiş geçici isimlerdir. Bu geçici isimler sayesinde sql’i daha anlaşılır ve kısa yazmak mümkündür.
Aynı ifadeyi join birleştirme operatörü ile de yapabiliriz:
SELECT h.hasta_no,h.hasta_adi,k.klinik_adi FROM hastalar h join klinik k
on(h.klinik_id=k.klinik_id) WHERE k.klinik_id=’2’
SELECT hasta_adi,count(*) sayısı FROM hastalar GROUP BY hasta_adihasta adına göre grupladığımızda adı Ahmet olan 2 kaydın ve diğerlerinin birer tane olduğunu görürüz.Örnek kayıtlara göre aşağıdaki sonuç elde edilir.hasta_adi sayısı
-------- ----- ahmet 2 ali 1
ayse 1
Mustafa 1
DML(DATA MANIPULATION LANGUAGE-VERİ İŞLEME DİLİ)
-select (okuma)
-insert (kayıt girme)
-update (kayıt değiştirme)
-delete (kayıt silme)
select hasta_adi as adi from hastalar where hasta_id>’3’
hasta id’si 3’ten büyük olan hastaların adını ‘adı’ alias(takma ad) olarak ekrana getirir.
adi
--------
ayse
ahmet
select hasta_adi as adi from hastalar where hasta_id<’3’ and klinik_id=’3’
adi
-------
ahmet
select hasta_no as no from hastalar where hasta_adi like 'm%' or klinik_id='1'
no
------
185
210
240
select h.hasta_no,h.hasta_adi ' in klinigi ' k.klinik_adi "hastanin klinigi"
from hastalar h join klinik k
on (h.klinik_id=k.klinik_id)
operatörü ile birleştirme işlemleri yapılabilir.
insert into hastalar (1,100,’ahmet’,3)
karakter tipli veriler tek tırnak içine alınır.
update hastalar set hasta_adi=’fatma’ where hasta_adi=’ayse’
hasta adı ayse olan kayıttaki hastanın adını fatma olarak değiştirir.
delete from hastalar where hasta_no=’100’
hasta numarası 100 olan hastanın kaydını(satırı) siler.
C-TABLO OLUŞTURMAK (CREATE TABLE ...)
CREATE TABLE TABLO_ADI (ALAN_ADI1 VERİTİPİ,
ALAN_ADI2 VERİTİPİ CONSTRAINT CONST_ADI1 NOT NULL,
ALAN_ADI3 VERİTİPİ CONSTRAINT CONST_ADI2 NOT NULL,
ALAN_ADI3 VERİTİPİ CONSTRAINT CONST_ADI3 CHECK(ALAN_ADI3),
ALAN_ADI4 VERİTİPİ CONSTRAINT CONST_ADI4 NOT NULL,
ALAN_ADI5 VERİTİPİ CONSTRAINT CONST_ADI5 UNIQUE(ALAN_ADI5),
ALAN_ADI6 VERİTİPİ CONSTRAINT CONST_ADI6 NOT NULL,
CONSTRAINT CONST_ADI7 FOREIGN KEY(ALAN_ADI5) REFERENCES TABLO_ADI(ALAN_ADI5),
CONSTRAINT CONST_ADI8 PRIMARY KEY(ALAN_ADI1))
İlişkili bir tablonun genel şeması yukarıdaki gibidir.
CREATE TABLE hastalar (hasta_id NUMBER(4),
hasta_no NUMBER(4) CONSTRAINT const_nn_hasta_no NOT NULL,
hasta_adi VARCHAR2(15) CONSTRAINT const_nn_hasta_adi NOT NULL,
klinik_id NUMBER(4) CONSTRAINT const_nn_klinik_id NOT NULL,
CONSTRAINT const_uq_hasta_no UNIQUE(hasta_no),
CONSTRAINT const_fk_klinik_id FOREIGN KEY(klinik_id) REFERENCES klinik(klinik_id),
CONSTRAINT const_pk_hasta_id PRIMARY KEY(hasta_id));
yada
CREATE TABLE hastalar (hasta_id NUMBER(4),
hasta_no NUMBER(4),
hasta_adi VARCHAR2(15) NOT NULL,
klinik_id NUMBER(4),
CONSTRAINT const_uq_hasta_no UNIQUE(hasta_no),
CONSTRAINT const_fk_klinik_id FOREIGN KEY(klinik_id) REFERENCES klinik(klinik_id),
CONSTRAINT const_pk_hasta_id PRIMARY KEY(hasta_id));
hastalar tablosu ile klinik tablosunun ‘klinik_id’ alanları ortaktır,
bu yüzden öncelikle klinik tablosunu oluşturuyoruz,sonra da klinik tablosunu referans ederek hastalar tablosundaki klinik_id alanını foreign key(ikincil anahtar) yaparak hastalar tablosunu oluşturuyoruz.
CREATE TABLE klinik(klinik_id number(4),
klinik_adi varchar2(20) CONSTRAINT const_nn_klinik_adi NOT NULL,
CONSTRAINT const_pk_klinik_id PRIMARY KEY(klinik_id));
CREATE TABLE TABLO_ADI2 AS SELECT * FROM TABLO_ADI WHERE ...
CREATE TABLE hastalar2 as select * from hastalar
‘hastalar’ tablosunu ‘hastalar2’ adında, tüm kayıtları ile birlikte bir kopyasını oluşturabiliriz.
CREATE TYPE bolum_tip AS OBJECT ( bolum_no NUMBER(4), Bolum_adi VARCHAR2(20) ); alan ve veritiplerini, type(tip) denilen yapılarda önceden oluşturarak sonradan oluşturacağımız tablolar için kolaylık sağlamış oluruz. CREATE TABLE bolum OF bolum_tip; ‘bolum’ tablosunu oluştururken alan ve veritipi tanımlaması yapmadan önceden hazırladığımız tip üzerinden tablomuzu oluşturabiliriz. D-TABLO YAPISINDA DEĞİŞİKLİK YAPMAK (ALTER TABLE ...)
ALTER TABLE hastalarADD hasta_soyadi VARCHAR2(15)ADD fonksiyonu ile hastalar tablosuna hastanın soyadının girilebilmesi için, ‘hasta-soyadi’ adında bir alan eklenmiştir.
ALTER TABLE hastalarMODIFY hasta_soyadi VARCHAR2(25)
MODIFY fonksiyonu ile istediğimiz alan üzerinde değişiklik yapabiliriz,mesela alanın boyutunu genişletebiliriz.
ALTER TABLE hastalarDROP hasta_soyadihastalar tablosunda var olan ‘hasta_soyadi’ alanını DROP fonksiyonu ile silebiliriz.
ALTER TABLE hastalarRENAME TABLE hastalar1’hastalar’ tablosunun adını ‘hastalar1’ olarak RENAME TABLE fonksiyonu ile değiştirebiliriz.
DROP TABLE hastalar
Hastalar tablosunu tüm kayıtlarıyla birlikte siler.
E-KULLANICI OLUŞTURMAK (CREATE USER ...)
CREATE USER USER_NAME IDENTIFIED BY PASSWORD ..
CREATE USER orhan IDENTIFIED BY o
Basitçe bir kullanıcı yukarıdaki gibi oluşturulur,default olarak ‘USERS01.DBF’ datafile’ını ve tablespace’ini kullanır.
Fakat kullanıcı kendi kullanacağı bir tablespace ve datafile için aşağıdaki şekilde oluşturulmalıdır;
CREATE USER orhan IDENTIFIED BY o DEFAULT TABLESPACE test TEMPORARY TABLESPACE temp;
Burada ‘test’ tablespace’i daha önceden(kullanıcı oluşturulmadan) oluşturulmuştur.
GRANT ... TO USER (KULLANICIYA HAKLAR VERMEK)
grant connect to orhan
yeni oluşturulan ‘orhan’ kullanıcısına database’e bağlanma izni öncelikle verilmelidir.
Orhan kullanıcısı olarak bağlı iken;
grant select on hastalar to ahmet
orhan kullanıcısına ait ‘hastalar’ tablosunu okuma hakkını(select) ahmet kullanıcısına verebiliyoruz.
Daha sonra Ahmet kullanıcısı olarak bağlanıp ,
select * from orhan.hastalar
sorgusuyla hastalar tablosunu ahmet’in okuması sağlanır.
revoke select on hastalar from ahmet
ile de orhan kullanıcısı ahmet’e verdiği select(okuma) hakkını geri alabilir.
grant delete on hastalar to ahmet
grant update on hastalar to ahmet
grant insert on hastalar to ahmet
revoke delete on hastalar from ahmet
revoke update on hastalar from ahmet
revoke insert on hastalar from ahmet
grant select,update,delete,insert on hastalar to public
ie bu hakları bütün kullanıcılara verebiliriz.
grant sysdba to orhan
revoke sysdba from orhan
grant imp_full_database to ahmet
grant exp_full_database to ahmet
hakları ile database’i export ve import etme yetkisi verilebilir.
grant create table,alter any table,drop any table,create user,alter user,drop user,create role,drop any role,grant any role to Ahmet
SELECT * FROM SESSION_ROLES
Sorgusu İle kullanıcının sahip olduğu tüm rolleri görüntüleyebiliriz.
SELECT * FROM SESSION_PRIVS Sorgusu ile de kullanıcının sahip olduğu tüm yetkileri görebiliriz.
ALTER USER orhan IDENTIFIED BY ordba
Alter user kalıbı ile user’in şifresini değiştirebiliriz.
DROP USER orhan CASCADE Drop user kalıbını cascade deyimi ile kullandığımızda user’i tüm bağlantıları ile birlikte siler.
set line 100;
SELECT USERNAME, PROFILE, ACCOUNT_STATUS FROM DBA_USERS
kullanıcının sahip olduğu profile ve hesaplarını görüntüleyebiliriz.
----------------------------------------------
2 türlü tablespace'i drop edebiliriz;
burada 1. yol diğerine göre daha hızlıdır.
1- yol:
drop user orhan cascade;
drop tablespace test;
2- yol:
drop tablespace test including contents;
drop user orhan;
Üzerinde sql komutlarını uygulayacağımız, örnek olarak klinik ve hastalar tablosundan birkaç kayıt verilsin.Klinik tablosundaki alan isimleri ve örnek veriler;
klinik_id klinik_adi
--------- -----------
1 dahiliye
2 kbb
3 göz
4 ortopedi
hastalar tablosundaki alan isimleri ve örnek veriler;
hasta_id hasta_no hasta_adi klinik_id
-------- --------- --------- ---------
1 100 ahmet 3
2 185 mustafa 2
3 210 ali 1
4 240 ayse 1
5 250 ahmet 3
Bu noktadan sonraki örnekleri yukarıdaki değerleri göz önünde tutarak inceleyiniz.
A-SQL FONKSİYONLARISQL’de kullanılan bazı fonksiyonlar vardır, bu fonksiyonlar ekrana sadece tek değer görüntülerler.
SUM([DISTINCT] alan_adi) Belirtilen alan için toplam fonksiyonu (sayısal alanlarda) COUNT(*) Toplam kayıt sayısı COUNT(DISTINCT alan_adi) Belirtilen alana göre farklı olan kayıtların sayısıMAX([DISTINCT] alan_adi) Belirtilen alanda en büyük değerMIN(DISTINCT] alan_adi) Belirtilen alanda en küçük değer AVG([DISTINCT] alan_adi) Belirtilen alanda ortalama değeri. DISTINCT parametresi ile belirtilen alanda bulunan bilgilerden aynı olanlarından sadece birinin seçilmesini sağlar.
SELECT COUNT(*) FROM hastalarSonucunda ekrana gelecek kayıt sayısı 5 dir.
SELECT DISTINCT klinik_id FROM hastalar
Tekrar eden kayıtlardan birer tane listelenir.
klinik_id
---------
3
2
1
SELECT COUNT(DISTINCT klinik_id) FROM hastalar
Sql ifadesinde ekrana gelecek kayıt sayısı 3 olacaktır.
SELECT MAX(hasta_no) FROM hastalarEn büyük hasta numarası, ekrana 250 olarak görüntüler. En büyük değer kaç tane olursa olsun bir tanesi görüntülenir.
SELECT SUM(hasta_no) FROM hastalarhasta numaralarının toplamını ekrana verecektir.
B-SORGULAMA
SELECT hasta_no*10 FROM hastalar
hastalar tablosundaki tüm hastaların hasta numaralarının 10 ile çarpımını ekrana görüntüleyecektir. Burada hasta numaralarının 10 ile çarpımı sadece ekrana görüntülenecek tabloda ise değişmeyecektir.
SELECT * FROM hastalar
hastalar tablosundaki bütün alanların içeriklerini ekrana görüntüleyecektir.
SELECT * FROM hastalar WHERE hasta_adi=’ahmet’
Hasta adı ahmet olan kayıtları ekrana getirecektir.tablomuzda 2 tane ahmet adı olduğu için 2 kayıt ekrana gelecektir.
SELECT * FROM hastalar ORDER BY hasta_adi
Tabloyu Hasta adına göre A’dan Z’ye sıralar.
SELECT * FROM hastalar ORDER BY hasta_adi DESC
Tabloyu Hasta adına göre Z’den A’ya sıralar.
SELECT hasta_adi FROM hastalar WHERE hasta_adi IN (‘ali’,’ayse’)hastalar tablosunda hasta_adi alanında içinde ali ve ayşe olanları listeler.
SELECT * FROM hastalar WHERE hasta_no IS NULL
hasta_no alanı boş olan kayıtları listeler.
SELECT * FROM hastalar WHERE hasta_no IS NOT NULL
hasta_no alanı boş olmayan kayıtları listeler.
SELECT hasta_no,hasta_adi FROM hastalar WHERE hasta_adi LIKE ‘a%’Adı ‘a’ ile başlayan kayıtların hasta no ve adlarını listeler.
SELECT hasta_no,hasta_adi FROM hastalar WHERE hasta_adi LIKE ‘%me%’hasta_adi alanında içinde ‘me’ olan kayıtların hasta no ve adlarını listeler.
SELECT hasta_no,hasta_adi FROM hastalar WHERE hasta_adi LIKE ‘%a’Adı ‘a’ ile biten kayıtların hasta no ve adlarını listeler.
SELECT alan_adi FROM tablo1,tablo2 WHERE koşullarBirden fazla tablodan aynı anda bilgi getirilmesi gerektiğinde, ortak alanlar üzerinden birleştirme işlemleri yapılır. Birleştirme işlemi koşullar bölümünde yapılır, ortak olan alanlar eşleştirilir.
SELECT h.hasta_no,h.hasta_adi,k.klinik_adi FROM hastalar h,klinik k
WHERE h.klinik_id=k.klinik_id and k.klinik_id=’2’
Klinik id’si 2 olan hastanın no’sunu,adını ve klinik adını ekrana getirir, klinik tablosunda olan klinik_adi alanını da hastalar tablosundaki diğer alanlar gibi ekrana getirmek istiyorsak, bu klinik tablosu ile hastalar tablosunu ortak alan üzerinde birleştirmemiz gerekir. Burada ‘h’ hastalar tablosuna, ‘k’ klinik tablosuna verilmiş geçici isimlerdir. Bu geçici isimler sayesinde sql’i daha anlaşılır ve kısa yazmak mümkündür.
Aynı ifadeyi join birleştirme operatörü ile de yapabiliriz:
SELECT h.hasta_no,h.hasta_adi,k.klinik_adi FROM hastalar h join klinik k
on(h.klinik_id=k.klinik_id) WHERE k.klinik_id=’2’
SELECT hasta_adi,count(*) sayısı FROM hastalar GROUP BY hasta_adihasta adına göre grupladığımızda adı Ahmet olan 2 kaydın ve diğerlerinin birer tane olduğunu görürüz.Örnek kayıtlara göre aşağıdaki sonuç elde edilir.hasta_adi sayısı
-------- ----- ahmet 2 ali 1
ayse 1
Mustafa 1
DML(DATA MANIPULATION LANGUAGE-VERİ İŞLEME DİLİ)
-select (okuma)
-insert (kayıt girme)
-update (kayıt değiştirme)
-delete (kayıt silme)
select hasta_adi as adi from hastalar where hasta_id>’3’
hasta id’si 3’ten büyük olan hastaların adını ‘adı’ alias(takma ad) olarak ekrana getirir.
adi
--------
ayse
ahmet
select hasta_adi as adi from hastalar where hasta_id<’3’ and klinik_id=’3’
adi
-------
ahmet
select hasta_no as no from hastalar where hasta_adi like 'm%' or klinik_id='1'
no
------
185
210
240
select h.hasta_no,h.hasta_adi ' in klinigi ' k.klinik_adi "hastanin klinigi"
from hastalar h join klinik k
on (h.klinik_id=k.klinik_id)
operatörü ile birleştirme işlemleri yapılabilir.
insert into hastalar (1,100,’ahmet’,3)
karakter tipli veriler tek tırnak içine alınır.
update hastalar set hasta_adi=’fatma’ where hasta_adi=’ayse’
hasta adı ayse olan kayıttaki hastanın adını fatma olarak değiştirir.
delete from hastalar where hasta_no=’100’
hasta numarası 100 olan hastanın kaydını(satırı) siler.
C-TABLO OLUŞTURMAK (CREATE TABLE ...)
CREATE TABLE TABLO_ADI (ALAN_ADI1 VERİTİPİ,
ALAN_ADI2 VERİTİPİ CONSTRAINT CONST_ADI1 NOT NULL,
ALAN_ADI3 VERİTİPİ CONSTRAINT CONST_ADI2 NOT NULL,
ALAN_ADI3 VERİTİPİ CONSTRAINT CONST_ADI3 CHECK(ALAN_ADI3),
ALAN_ADI4 VERİTİPİ CONSTRAINT CONST_ADI4 NOT NULL,
ALAN_ADI5 VERİTİPİ CONSTRAINT CONST_ADI5 UNIQUE(ALAN_ADI5),
ALAN_ADI6 VERİTİPİ CONSTRAINT CONST_ADI6 NOT NULL,
CONSTRAINT CONST_ADI7 FOREIGN KEY(ALAN_ADI5) REFERENCES TABLO_ADI(ALAN_ADI5),
CONSTRAINT CONST_ADI8 PRIMARY KEY(ALAN_ADI1))
İlişkili bir tablonun genel şeması yukarıdaki gibidir.
CREATE TABLE hastalar (hasta_id NUMBER(4),
hasta_no NUMBER(4) CONSTRAINT const_nn_hasta_no NOT NULL,
hasta_adi VARCHAR2(15) CONSTRAINT const_nn_hasta_adi NOT NULL,
klinik_id NUMBER(4) CONSTRAINT const_nn_klinik_id NOT NULL,
CONSTRAINT const_uq_hasta_no UNIQUE(hasta_no),
CONSTRAINT const_fk_klinik_id FOREIGN KEY(klinik_id) REFERENCES klinik(klinik_id),
CONSTRAINT const_pk_hasta_id PRIMARY KEY(hasta_id));
yada
CREATE TABLE hastalar (hasta_id NUMBER(4),
hasta_no NUMBER(4),
hasta_adi VARCHAR2(15) NOT NULL,
klinik_id NUMBER(4),
CONSTRAINT const_uq_hasta_no UNIQUE(hasta_no),
CONSTRAINT const_fk_klinik_id FOREIGN KEY(klinik_id) REFERENCES klinik(klinik_id),
CONSTRAINT const_pk_hasta_id PRIMARY KEY(hasta_id));
hastalar tablosu ile klinik tablosunun ‘klinik_id’ alanları ortaktır,
bu yüzden öncelikle klinik tablosunu oluşturuyoruz,sonra da klinik tablosunu referans ederek hastalar tablosundaki klinik_id alanını foreign key(ikincil anahtar) yaparak hastalar tablosunu oluşturuyoruz.
CREATE TABLE klinik(klinik_id number(4),
klinik_adi varchar2(20) CONSTRAINT const_nn_klinik_adi NOT NULL,
CONSTRAINT const_pk_klinik_id PRIMARY KEY(klinik_id));
CREATE TABLE TABLO_ADI2 AS SELECT * FROM TABLO_ADI WHERE ...
CREATE TABLE hastalar2 as select * from hastalar
‘hastalar’ tablosunu ‘hastalar2’ adında, tüm kayıtları ile birlikte bir kopyasını oluşturabiliriz.
CREATE TYPE bolum_tip AS OBJECT ( bolum_no NUMBER(4), Bolum_adi VARCHAR2(20) ); alan ve veritiplerini, type(tip) denilen yapılarda önceden oluşturarak sonradan oluşturacağımız tablolar için kolaylık sağlamış oluruz. CREATE TABLE bolum OF bolum_tip; ‘bolum’ tablosunu oluştururken alan ve veritipi tanımlaması yapmadan önceden hazırladığımız tip üzerinden tablomuzu oluşturabiliriz. D-TABLO YAPISINDA DEĞİŞİKLİK YAPMAK (ALTER TABLE ...)
ALTER TABLE hastalarADD hasta_soyadi VARCHAR2(15)ADD fonksiyonu ile hastalar tablosuna hastanın soyadının girilebilmesi için, ‘hasta-soyadi’ adında bir alan eklenmiştir.
ALTER TABLE hastalarMODIFY hasta_soyadi VARCHAR2(25)
MODIFY fonksiyonu ile istediğimiz alan üzerinde değişiklik yapabiliriz,mesela alanın boyutunu genişletebiliriz.
ALTER TABLE hastalarDROP hasta_soyadihastalar tablosunda var olan ‘hasta_soyadi’ alanını DROP fonksiyonu ile silebiliriz.
ALTER TABLE hastalarRENAME TABLE hastalar1’hastalar’ tablosunun adını ‘hastalar1’ olarak RENAME TABLE fonksiyonu ile değiştirebiliriz.
DROP TABLE hastalar
Hastalar tablosunu tüm kayıtlarıyla birlikte siler.
E-KULLANICI OLUŞTURMAK (CREATE USER ...)
CREATE USER USER_NAME IDENTIFIED BY PASSWORD ..
CREATE USER orhan IDENTIFIED BY o
Basitçe bir kullanıcı yukarıdaki gibi oluşturulur,default olarak ‘USERS01.DBF’ datafile’ını ve tablespace’ini kullanır.
Fakat kullanıcı kendi kullanacağı bir tablespace ve datafile için aşağıdaki şekilde oluşturulmalıdır;
CREATE USER orhan IDENTIFIED BY o DEFAULT TABLESPACE test TEMPORARY TABLESPACE temp;
Burada ‘test’ tablespace’i daha önceden(kullanıcı oluşturulmadan) oluşturulmuştur.
GRANT ... TO USER (KULLANICIYA HAKLAR VERMEK)
grant connect to orhan
yeni oluşturulan ‘orhan’ kullanıcısına database’e bağlanma izni öncelikle verilmelidir.
Orhan kullanıcısı olarak bağlı iken;
grant select on hastalar to ahmet
orhan kullanıcısına ait ‘hastalar’ tablosunu okuma hakkını(select) ahmet kullanıcısına verebiliyoruz.
Daha sonra Ahmet kullanıcısı olarak bağlanıp ,
select * from orhan.hastalar
sorgusuyla hastalar tablosunu ahmet’in okuması sağlanır.
revoke select on hastalar from ahmet
ile de orhan kullanıcısı ahmet’e verdiği select(okuma) hakkını geri alabilir.
grant delete on hastalar to ahmet
grant update on hastalar to ahmet
grant insert on hastalar to ahmet
revoke delete on hastalar from ahmet
revoke update on hastalar from ahmet
revoke insert on hastalar from ahmet
grant select,update,delete,insert on hastalar to public
ie bu hakları bütün kullanıcılara verebiliriz.
grant sysdba to orhan
revoke sysdba from orhan
grant imp_full_database to ahmet
grant exp_full_database to ahmet
hakları ile database’i export ve import etme yetkisi verilebilir.
grant create table,alter any table,drop any table,create user,alter user,drop user,create role,drop any role,grant any role to Ahmet
SELECT * FROM SESSION_ROLES
Sorgusu İle kullanıcının sahip olduğu tüm rolleri görüntüleyebiliriz.
SELECT * FROM SESSION_PRIVS Sorgusu ile de kullanıcının sahip olduğu tüm yetkileri görebiliriz.
ALTER USER orhan IDENTIFIED BY ordba
Alter user kalıbı ile user’in şifresini değiştirebiliriz.
DROP USER orhan CASCADE Drop user kalıbını cascade deyimi ile kullandığımızda user’i tüm bağlantıları ile birlikte siler.
set line 100;
SELECT USERNAME, PROFILE, ACCOUNT_STATUS FROM DBA_USERS
kullanıcının sahip olduğu profile ve hesaplarını görüntüleyebiliriz.
----------------------------------------------
2 türlü tablespace'i drop edebiliriz;
burada 1. yol diğerine göre daha hızlıdır.
1- yol:
drop user orhan cascade;
drop tablespace test;
2- yol:
drop tablespace test including contents;
drop user orhan;
Kaydol:
Kayıtlar (Atom)