ben

OMÜ , Bilgisayar Mühendisliği, 13'

19 Ocak 2022 Çarşamba

Db üzerinde genel arama (Procedure)

 

üzerinde çalıştığımız bir veritabanında; herhangi bir tabloda herhangi bir sütunda bir kelime içeren verileri getirmemiz gerekebilir. Buna bir yerde ihtiyacım oldu yazdım. Başka bir zaman yeniden ihtiyac duyarsam burada dursun belki başka birinin  daha ihtiyacını görür.

Burada iki procedure yazdım. Birincisi like pocedurü, diğeri genel arama proceduru, genel arama procedurunun içinden like procedurunu çağırdığım için like procedurunu yazalım ilk önce.

DELIMITER $$

create or replace procedure sp_like( 

    in tname varchar(50),

    in cname varchar(50),

    in ifade varchar(100),

    out sayi int

)

BEGIN

        SET @sql := CONCAT("select count(*) into @sayi  from ",tname," where ",cname," like '%",ifade,"%'") ;

        PREPARE stmt FROM @sql ; 

        EXECUTE stmt ;

        if @sayi!=0 THEN

            SET @icerik := CONCAT("select * from ",tname," where ",cname," like '%",ifade,"%'") ;

            PREPARE icrk FROM @icerik ; 

            EXECUTE icrk ;

        end if;

end $$




Bu proceduru çalıştırdıktan sonra dbara procedurunu yazıp çalıştıralım.



DELIMITER $$

create or replace procedure sp_dbara(

    in ifade varchar(100)

)

BEGIN

DECLARE n INT DEFAULT 0;

DECLARE x INT DEFAULT 0;

declare tablename varchar(50);

declare sutun_say int default 0;

declare veritur varchar(30);

declare sutun varchar(80);

DECLARE y INT DEFAULT 0;

declare s int default 0;

select count(distinct TABLE_NAME) into n from information_schema.columns where table_schema = 'dbname' order by TABLE_NAME;

SET x=0;

WHILE x<n do

               select distinct TABLE_NAME into @tablename from information_schema.columns where table_schema = 'dbname' order by TABLE_NAME limit x,1;

    select count(distinct COLUMN_NAME) into sutun_say FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'dbname' AND TABLE_NAME= @tablename;

    SET y=0;

               WHILE y<sutun_say do

               select  COLUMN_NAME, DATA_TYPE into @sutun, @veritur from information_schema.columns where table_schema = 'dbname' AND TABLE_NAME= @tablename group by column_name limit y,1;   

         if @veritur='VARCHAR' then

                call sp_like(@tablename,@sutun, ifade,@sayi);

         end if;

         set y=y+1;

    end while;

    set x=x+1;

END while;

end $$




Bu proceduru de çalıştırdıktan sonra  phpmyadmindeki  ust menüde yordam sekmesindeki sp_dbara yordamındaki çalıştır butonuna basalım


Değer kısmına 100 karakteri geçmeyecek aranacak olan kelime ya da cümleyi gir




Git botununa tıkla


ifadenin geçtiği tablodaki veriler her bir tablo için ayrı ayrı listelenir.

Hiç yorum yok: