簡體   English   中英

在存儲過程中使用變量作為字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM