26 Mayıs 2017 Cuma

Informix'de Veritabanındaki Tabloları Listelemek




Informix'de Veritabanındaki Tüm Tabloları ve O Tabloların Alanlarını, Alan tiplerini listeleyen SQL Sorgusu:


SELECT TRIM(t.tabname) || '.' || TRIM(c.colname) AS table_dot_column,
CASE 
  WHEN MOD(coltype,256)=0 THEN 'CHAR' 
  WHEN MOD(coltype,256)=1 THEN 'SMALLINT' 
  WHEN MOD(coltype,256)=2 THEN 'INTEGER' 
  WHEN MOD(coltype,256)=3 THEN 'FLOAT' 
  WHEN MOD(coltype,256)=4 THEN 'SMALLFLOAT' 
  WHEN MOD(coltype,256)=5 THEN 'DECIMAL' 
  WHEN MOD(coltype,256)=6 THEN 'SERIAL' 
  WHEN MOD(coltype,256)=7 THEN 'DATE' 
  WHEN MOD(coltype,256)=8 THEN 'MONEY' 
  WHEN MOD(coltype,256)=9 THEN 'NULL' 
  WHEN MOD(coltype,256)=10 THEN 'DATETIME' 
  WHEN MOD(coltype,256)=11 THEN 'BYTE' 
  WHEN MOD(coltype,256)=12 THEN 'TEXT' 
  WHEN MOD(coltype,256)=13 THEN 'VARCHAR' 
  WHEN MOD(coltype,256)=14 THEN 'INTERVAL' 
  WHEN MOD(coltype,256)=15 THEN 'NCHAR' 
  WHEN MOD(coltype,256)=16 THEN 'NVARCHAR' 
  WHEN MOD(coltype,256)=17 THEN 'INT8' 
  WHEN MOD(coltype,256)=18 THEN 'SERIAL8' 
  WHEN MOD(coltype,256)=19 THEN 'SET' 
  WHEN MOD(coltype,256)=20 THEN 'MULTISET' 
  WHEN MOD(coltype,256)=21 THEN 'LIST' 
  WHEN MOD(coltype,256)=22 THEN 'ROW (unnamed)' 
  WHEN MOD(coltype,256)=23 THEN 'COLLECTION' 
  WHEN MOD(coltype,256)=40 THEN 'LVARCHAR fixed-length opaque types' 
  WHEN MOD(coltype,256)=41 THEN 'BLOB, BOOLEAN, CLOB variable-length opaque types' 
  WHEN MOD(coltype,256)=43 THEN 'LVARCHAR (client-side only)' 
  WHEN MOD(coltype,256)=45 THEN 'BOOLEAN' 
  WHEN MOD(coltype,256)=52 THEN 'BIGINT' 
  WHEN MOD(coltype,256)=53 THEN 'BIGSERIAL' 
  WHEN MOD(coltype,256)=2061 THEN 'IDSSECURITYLABEL'
  WHEN MOD(coltype,256)=4118 THEN 'ROW (named)' 
  ELSE TO_CHAR(coltype)
END AS Type,
BITAND(coltype,256)=256 AS NotNull
  FROM "informix".systables  AS t
  JOIN "informix".syscolumns AS c ON t.tabid = c.tabid
 WHERE t.tabtype = 'T'
   AND t.tabid >= 100
 ORDER BY t.tabname, c.colno;




22 Mayıs 2017 Pazartesi

SQL'de Temp Tablolarla İşlem Yapmak





Temp tablolar local'de oluşturulan  ve db connection olduğu sürece işlevsel olan, geçici tablolardır. Session mantığı gibi, işlemi bitirip oturumu kapattıktan sonra, yani db bağlantısını kapatıp tekrar açtığımızda önceden oluşturmuş olduğumuz temp tabloya erişmemiz imkansızdır.

Konuyu bir örnek ile anlatacak olursak; örnekte genkur tablosuna önceki kayıtlarından birinin kopyasını alarak insert işlemi yapmak istiyoruz. Bunun için  genkur adındaki tablodan belirli bir tarihe ait kaydı ilk olarak geçici olarak tkur adındaki temp tablosuna aktarıyoruz, daha sonra tkur tablosuna aktardığımız kaydı güncelliyoruz, son olarak da tkur geçici tabloda güncellemiş olduğumuz kaydı genkur tablosuna aktarıyoruz. Böylece geçici (temp) tablo kullanımı sayesinde, herhangi bir tabloya önceki kayıtlarından kopya kaydı nasıl aktarılabileceğini görmüş olduk.


//Güncellemek istediğimiz kaydın temp tablosuna aktarılması

      -  SELECT * FROM genkur WHERE tarih=mdy(5,11,2017)
          INTO temp tkur


//Temp tablosuna aktarılan kaydın güncellenmesi
       - UPDATE tkur SET tarih=today


//Temp dosyasında güncellenen kaydın gerçek tabloya aktarılması
       - INSERT INTO genkur
         SELECT * FROM tkur











15 Mayıs 2017 Pazartesi

Excel'de Farklı Sayfalardaki Sütunları Karşılaştırma



VLOOKUP():

Excel'de Sheet2'deki sütuna bağlı kayıtların Sheet1'deki kayıtlarla karşılaştırılması ve farklı kayıtların filtrelenebilmesi için Sheet2'de, karşılaştırma sonucunu listelemek istediğimiz, sütuna aşağıdaki fonksiyonu tanımlamamız gerekir:



//formulde Belge No Sheet2 de karşılaştırmak istediğimiz sütun başlığına ait verilerin Sheet1 deki A:D sütunları arasında kalan veriler ile karşılaştırılması sağlanıyor. 


=VLOOKUP([@[Belge No]];Sheet1!A:D;1;FALSE)








3 Mayıs 2017 Çarşamba

Informix Database Server'da Tablolara Kullanıcı Yetkisi Verme




    SQL'de Database Tablolarına Kullanıcı Yetkisi Veren Stored Procedure:


Informix'de kullanıcılara tablo yetkisi veren procedure aşağıdaki gibi tanımlanabilir:


--- Aynı ad ile kayıtlı procedure var ise silinir. 
drop PROCEDURE if exists SET_PERMISSION

--- Informix'de işletilmek istenen iki komut arası ayıracı...
^!^  


---- stored procedure'nin oluşturulması...

CREATE PROCEDURE SET_PERMISSION()

---- procedure'de kullanılacak değişkenlerin tanımlanması..
DEFINE vYETKI char(200);
DEFINE vOWNER char(30);
DEFINE ERROR_NUMBER   INT;
DEFINE ISAM_ERROR_VAR INT;
DEFINE ERROR_DATA_VAR CHAR(255);
DEFINE vTABLOYOKHATAKODU INT;


---- hata kodlarına bakarak hata kodu karşılaştırması yapan başka bir procedure'nin çalıştırılması..
ON EXCEPTION SET ERROR_NUMBER, ISAM_ERROR_VAR, ERROR_DATA_VAR
  IF ERROR_NUMBER <> vTABLOYOKHATAKODU THEN
    RAISE EXCEPTION ERROR_NUMBER, ISAM_ERROR_VAR, ERROR_DATA_VAR;
  END IF;

END EXCEPTION;

---- procedure'de tanımlı bir değişkene const sayı ataması aşağıdaki gibidir.
LET vTABLOYOKHATAKODU=-206;


---- Select sorgusunda sonucu gelen tüm tabloları check eden foreach döngüsü...
FOREACH CR1 FOR

---- Select sonucunun procedure'de tanımlı vYETKI değişkenine atanması...
select 'GRANT ALL ON '||trim(OWNER)||'.'|| TRIM(TABNAME) || ' TO PUBLIC' into vYETKI
from systables
where ((tabtype='V' or statlevel='A') and tabname not like 'sys%')

---- vYETKI değişkenine atanan sonuçların execute edilmesi..
EXECUTE IMMEDIATE vYETKI;


---- döngü ve procedure'nin sonlandırılması...
END FOREACH;
               
END PROCEDURE  






2 Mayıs 2017 Salı

Informix Database Server SQL'de Veri Aktarımı



      SQL Dilinde Database Sunucular Arası Veri Aktarımı:


SQL 'de iki database arası veri aktarımı yapmak diğer yöntemlere göre çok daha hızlı olduğundan 'big data' database işlemlerinde zaman kazanabiliriz.


ortak@deneme1domain adresindeki veritabanından, ortkod tablosunda tipleri 9008 ile 9017 arasında olan kayıtları, ortak@deneme2domain adresindeki veritabanının ortkod tablosuna ekleme işlemi şu şekilde yapılır:

insert into ortak@deneme2domain:ortkod
select * from ortak@deneme1domain:ortkod
where tip between 9008 and 9017