Dinamik SQL'ler; içerlerindeki sütun dataları değişen, ya da farklı koşullar altında veriler çıkartan SQL'lerdir. Bunlar çalıştırıldığında sütun içerisindeki değişikliklere göre sonuçları yansıtmaktadır.
Dinamik SQL ile DDL,DCL veya DML ifadeleri yazılabilir ve PL/SQL'den çalıştırılabilinirler.
PL/SQL içerisinde izin verilen SQL ifadeleri SELECT; INSERT, UPDATE, DELETE, MERGE, COMMIT ve ROLLBACK'tir.
Programda içerisinde bulunmayan ve çalıştırılma zamanında oluşturulan SQL'lere dinamik SQL'ler deriz. Bunlar çalışma anında oluşturulduğu için PL/SQL değişkenleri kullanabilirler ve çalıştırabilirler. Dinamik SQL'lerin text'leri çalıştırılma anlarına kadar bilinmeyebilirler. O yüzden PL/SQL programının çalıştırılması beklenir. Yani programın derlenmesini değil çalıştırılmasını beklerler.
Program içerisinde oluşturduğumuz dinamik SQL'leri "execute immediate" ile hemen çalıştırabiliriz.
Dinamik SQL Örneği:
CREATE OR REPLACE PROCEDURE create_table(
p_table_name VARCHAR2, p_col_specs VARCHAR2) IS
BEGIN
EXECUTE IMMEDIATE 'CREATE TABLE ' || p_table_name ||
' (' || p_col_specs || ')';
END;
/
Bu örnekte prosedürümüzle bir tablo yaratmaktayız. Prosedürün derlenmesi sırasında gerekli veriler belirli olmadığı için dinamik SQL kullanırız.
BEGIN
create_table('EMPLOYEE_NAMES',
'id NUMBER(4) PRIMARY KEY, name VARCHAR2(40)');
END;
/
Prosedür tanımlandıktan sonra da çalıştırdığımız içindeki veriler çalıştırılma anında kullanılır. Çalıştırılma anında o veriler ile istediğimiz SQL tanımlanır. Dinamik SQL'imizin içine tablo adını ve sütunlarla ilgili bilgileri göndeririz. SQL oluşturulunca da hemen "execute immediate" ifadesi ile çalıştırılır.
Hiç yorum yok:
Yorum Gönder