ROWTYPE’ı PL/SQL kodlarımızda sıkça kullanırız.Bununla, yapısı tablonun bir satırı şeklinde olan bir type tanımlamış oluruz.Kısaca hatırlatmak gerekirse; Örneğin TTT tablosu ID ve DESCR alanlarından oluşuyor ise
a_row TTT%rowtype;
tanımladıgımızda “a_row” artık TTT tablosunun satırı tipinde bir değişkendir.Bu satır değişkenini kolonlarına! ”a_row.ID” ve “a_row.DESCR” seklinde ulaşbiliriz.Şimdi asıl konumuza geçelim.
Bu tipte bir değişkenimiz varsa ve değerleri girmiş isek bir satırı update ederken her bir kolon için tek tek “set …, …, …” kullanmamıza gerek yoktur.”…set row = row_type ..” demeniz yeterlidir.Örnek yapalım :
create table ttest nologging as
select object_id, object_name, object_type from user_objects
where rownum <= 10;
Diyelimki minimum object_id verisinde UPDATE yapacağız.Hangisiymiş bulalım
select min(object_id) from ttest;
min(object_id)
3
declare
ttest_row ttest%rowtype;
begin
ttest_row.object_id := 111;
ttest_row.object_name := ‘XXX’;
ttest_row.object_type := ‘???’;
update ttest set row = ttest_row where object_id = 3;
commit;
end;
Kontrol edelim :
select * from ttest where object_id = 111
object_id object_name object_type
111 XXX ???
Diğer bir konuda DEFUALT anahtar kelimesinin kolonlardaki kullanımına dair.Tabloda insert ya da update yaparken kolonun varsayılan değerini kullanmak isteyebilirz.Örnek olarak yukarıda oluşturduğumuz TTEST tablosunun “object_type” kolonuna varsayılan değer olarak ‘NEW_TYPE’ atayalım ve akabinde insert-update ile kullanalım :
SQL> alter table ttest modify object_type default ‘NEW_TYPE’;Table altered.
::: insert Örneği :::
SQL> insert into ttest values(999,’A_TABLE’, default);1 row created.SQL>
SQL> select * from ttest where object_id = 999;OBJECT_ID OBJECT_NAME OBJECT_TYPE
999 A_TABLE NEW_TYPE
::: UPDATE örneği :::
SQL> update ttest set object_type = default where object_id = (select min(object_id) from ttest);1 row updated.SQL>
SQL> select * from ttest where object_id = (select min(object_id) from ttest);
OBJECT_ID OBJECT_NAME OBJECT_TYPE
15 UNDO$ NEW_TYPE