ü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:
Yorum Gönder