मेरे पास एक sh स्क्रिप्ट है जहां मैं MySQL से कनेक्ट होता हूं और स्थानीय फ़ाइल में सहेजी गई संग्रहीत प्रक्रिया को निष्पादित करने का प्रयास करता हूं।

tblName="table${k}"
mysql -h 10.0.0.1 --user=username --password=password 
      -e "use db_test; set @tableName=${tblName}; source query.sql;"

और फ़ाइल query.sql:

set @str = concat('create table ', @tableName, ' (
 id int not null,
 ....
);');
prepare stmt from @str;
execute stmt;
deallocate prepare stmt;

Mysql कमांड लूप के लिए है, "k" एक इंडेक्स है। मैं तालिका नाम चर से लिए गए नाम के साथ एक तालिका बनाना चाहता हूं। समस्या यह है कि मुझे एक त्रुटि मिलती है:

ERROR 1054 (42S22) at line 1: Unknown column 'table1' in 'field list'
ERROR 1054 (42S22) at line 1: Unknown column 'table2' in 'field list'
ERROR 1054 (42S22) at line 1: Unknown column 'table3' in 'field list'
...

मैं थोड़ा भ्रमित हूं क्योंकि "टेबल 1" एक टेबल नाम है न कि कॉलम। क्या मैं गलत हूं? मुझे इस दृष्टिकोण का उपयोग करते हुए बहुत सारे उदाहरण मिले, लेकिन मुझे नहीं पता कि यह मेरे लिए काम क्यों नहीं कर रहा है।

0
AlleXyS 27 अक्टूबर 2020, 11:28

1 उत्तर

सबसे बढ़िया उत्तर

आदेश:

set @tableName=${tblName}

टैबलेटनाम को '' में संलग्न करने की आवश्यकता है।

ठीक करने के लिए करें:

set @tableName='${tblName}'

MySQL शेल में इसका परीक्षण करने से समस्या का पता चलता है:

mysql> set @tableName=table1;
ERROR 1054 (42S22): Unknown column 'table1' in 'field list'
mysql> set @tableName='table1';
Query OK, 0 rows affected (0.00 sec)

mysql>
1
Sergiu 27 अक्टूबर 2020, 11:56