[英]using variables as strings in stored procedure
如何在MySQL中使用變量表示字符串值? 下面的存儲過程具有兩個變量@varname
和@file1
。 它還使用concat()
從@file1
創建一個字符串,但是這些字符串值均未正確填充到腳本中。 (查詢未加載結果且未創建outfile。)如何修復此代碼,使其起作用?
DELIMITER $$
DROP PROCEDURE IF EXISTS `parse_descriptions`$$
CREATE PROCEDURE `parse_descriptions`()
BEGIN
SET @varname='something';
SET @file1= concat('D:/mypath/','@varname');
select d.id, d.term, d.conceptid from dtablename as d
where term like '%@varname%'
into outfile concat('@file1','_test.txt')
fields terminated by '\t'
optionally enclosed by ""
lines terminated by '\r\n'
;
END$$
CALL `parse_descriptions`()$$
DROP PROCEDURE IF EXISTS `parse_descriptions`$$
修改了您的代碼。 認為您在幾個地方的報價有誤
SET @varname='something';
SET @file1= concat('D:/mypath/',@varname); --here
select d.id, d.term, d.conceptid from dtablename as d
where term like concat('%', @varname, '%') -- here
into outfile concat(@file1,'_test.txt') -- here
fields terminated by '\t'
optionally enclosed by ""
lines terminated by '\r\n'
;
除了將引號放在參數的幾個地方而不是引號之外(我已經評論過),最大的問題是您正試圖在select ...into outfile
命令中使用變量,這只能通過prepared statement
來完成。 下面提供了一個示例[經過測試,效果很好]。 您可以根據需要進行相應的更改。
DELIMITER $$
CREATE PROCEDURE `parse_descriptions`()
BEGIN
SET @varname='harikas';
SET @file1= concat('D:/SO_Test/',@varname, '_test.txt');
SET @sql = CONCAT('select * from teachers where username like ''%', @varname, '%'' into outfile ''', @file1 , '''');
select @sql;
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END$$
准備好的語句將生成如下查詢
select * from teachers where username like '%harikas%' into outfile
'D:/SO_Test/harikas_test.txt'
調用程序
call parse_descriptions()
編輯:您在行尾缺少'
。 您修改的過程應如下所示
DELIMITER $$
DROP PROCEDURE IF EXISTS `parse_descriptions`$$
CREATE PROCEDURE `parse_descriptions`()
BEGIN
SET @varname='something';
SET @file1= concat('D:/mypath/',@varname, '_test.txt');
SET @sql = concat('select d.id, d.term, d.cid from dtablename as d where term like ''%', @varname, '%'' into outfile ''', @file1 , ''' fields terminated by ''\t'' optionally enclosed by "" lines terminated by ''\r\n''');
select @sql;
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END$$
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.