2012-10-04 19 views
7

मैं first_name कॉलम वाली प्रत्येक तालिका से डेटा आउटपुट करना चाहता हूं। मैंने निम्नलिखित प्रक्रिया को एक साथ रखा है, लेकिन मेरे लूप में, mysql वैरिएबल table_name का मूल्यांकन करने के बजाय अक्षर नाम का अर्थ है। क्या तय है?टेबल के माध्यम से MySQL पाश

delimiter // 

drop procedure if exists hunt // 
create procedure hunt() 
begin 
    DECLARE done int default false; 
    DECLARE table_name CHAR(255); 

    DECLARE cur1 cursor for SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS 
     WHERE TABLE_SCHEMA = "wholesale_production" and COLUMN_NAME LIKE "%first%" ; 
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; 
    open cur1; 

    myloop: loop 
     fetch cur1 into table_name; 
     if done then 
      leave myloop; 
     end if; 
     select * from `wholesale_production`.table_name where created_at >= '2012-10-01'; 
    end loop; 

    close cur1; 
end // 

delimiter ; 

call hunt(); 

उत्तर

9

इस प्रयास करें प्रयास करें:

delimiter // 

drop procedure if exists hunt // 
create procedure hunt() 
begin 
    DECLARE done int default false; 
    DECLARE table_name CHAR(255); 

    DECLARE cur1 cursor for SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS 
     WHERE TABLE_SCHEMA = "wholesale_production" and COLUMN_NAME LIKE "%first%" ; 
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; 
    open cur1; 

    myloop: loop 
     fetch cur1 into table_name; 
     if done then 
      leave myloop; 
     end if; 
     set @sql = CONCAT('select * from `wholesale_production`.', table_name, ' where created_at >= '2012-10-01'); 
     prepare stmt from @sql; 
     execute stmt; 
     drop prepare stmt; 
    end loop; 

    close cur1; 
end // 

delimiter ; 

call hunt(); 
+1

मुझे एक ही समस्या है। अगर मुझे तालिका नाम को 'पसंद'%%% ​​'के रूप में फ़िल्टर करने की परवाह नहीं है, तो क्या मैं केवल' SELECT TABLE_NAME 'के बजाय' दिखाएं टैबलेट 'का उपयोग कर सकता हूं? – Kal

+1

table_name एक आरक्षित नाम है। एक अलग नाम में बदला जाना चाहिए। –

-1

cur1 में तुम वहाँ TABLE_NAME उपयोग कर रहे हैं तालिका के असली नाम का प्रयोग

+1

लेकिन तालिका ज्ञात नहीं है, उसे INFORMATION_SCHEMA से तालिका नाम मिल रहे हैं। – Barmar

0

ऊपर का एक छोटा संपादित सभी तालिकाओं ahtoug itertate करने और चयन उन्हें।

delimiter // 
drop procedure if exists hunt // 
create procedure hunt() 
begin 
    DECLARE done int default false; 
    DECLARE table_name CHAR(255); 

    DECLARE cur1 cursor for SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES 
        WHERE table_schema ='mbu4u'; 
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; 
    open cur1; 
     myloop: loop 
     fetch cur1 into table_name; 
     if done then 
      leave myloop; 
     end if; 
     set @sql = CONCAT('select * from `mbu4u`.',table_name); 
     prepare stmt from @sql; 
     execute stmt; 
     drop prepare stmt; 
    end loop; 

    close cur1; 
end // 

delimiter // 
0

table_name एक आरक्षित टोकन "DECLARE table_name CHAR (255)" में एक अन्य चर नाम का उपयोग करता है; "

संबंधित मुद्दे