0
聲明我在MySQL的是例如此創建SQL查詢的存儲過程:MySQL的:從文本變量準備不起作用
select
a.street,
a.bild,
a.korp,
a.flat,
a.serial_num,
nlog.value
from(
select
cli.street,
cli.bild,
cli.korp,
cli.flat,
dev.serial_num,
mlog.value,
max(mlog.id) as $max_id
from mbus_clients as cli
join mbus_devices as dev
on dev.id_client=cli.id
join mbus_log as mlog
on mlog.serial_num=dev.serial_num
where street like CONCAT($in_street,'%')
AND bild=1 AND korp='t' AND flat=1
)as a
join mbus_log as nlog
on a.$max_id = nlog.id;
此查詢工作正常,並存儲在$query
變量,它的類型是:文本(65535)。 當我嘗試PREPARE stmnt1 FROM 'SELECT'
這工作正常,但是當我嘗試PREPARE stmnt1 FROM $query
mysql說有關語法上的一些錯誤。問題是什麼?
DROP PROCEDURE IF EXISTS `mbusGetClientsByStreet`;;
CREATE DEFINER = 'root'@'chl.rontel.ru' PROCEDURE `mbusGetClientsByStreet`(
$in_street char(50),
$in_amount int(11),
$in_bild int(11),
$in_korp char(1),
$in_flat int(11)
)
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
begin
/*Скопин C.С. 01.09.2014
получение списка клиентов по части названия улицы и полного адреса*/
declare $query text(65535);
set $query ="
select
a.street,
a.bild,
a.korp,
a.flat,
a.serial_num,
nlog.value
from(
select
cli.street,
cli.bild,
cli.korp,
cli.flat,
dev.serial_num,
mlog.value,
max(mlog.id) as $max_id
from mbus_clients as cli
join mbus_devices as dev
on dev.id_client=cli.id
join mbus_log as mlog
on mlog.serial_num=dev.serial_num
where street like CONCAT($in_street,\'%\')
";
if $in_bild is NOT NULL THEN
SET $query = CONCAT($query,' AND bild=',$in_bild);
if $in_korp is NOT NULL THEN
set $query = CONCAT($query,' AND korp=\'',$in_korp,'\'');
end if;
if $in_flat is NOT NULL THEN
set $query = CONCAT($query,' AND flat=',$in_flat);
end if;
end if;
set $query=CONCAT($query,'
)as a
join mbus_log as nlog
on a.$max_id = nlog.id;
');
PREPARE stmt1 FROM $query;
SELECT $query;
end;
您是否逃過了引號? – 2014-09-02 11:24:04
這是什麼意思?你能發佈錯誤嗎?另請嘗試@query。 – 2014-09-02 11:28:25
我已經添加了過程文本。那麼我逃脫了。還有什麼不對嗎? – 2014-09-02 11:28:43