2016-04-07 3 views
1

Я пытаюсь выполнить динамический запрос для этого, я использую функцию CONCAT(). но я думаю, что моя строка/запрос длинная, поэтому CONCAT() не работает.concate() long siring in mysql store procedure

set @query:=CONCAT(' SELECT (select GROUP_CONCAT(sp.specialization) FROM DSpecialization_Master dsp LEFT JOIN 
Specialization_Master sp on sp.id = dsp.specialization WHERE dsp.profileid in (', @MultiDoctorIds ,') 
) as drspec,pm.id as profileid,dam.city,um.profile_url FROM Profile_Master pm LEFT JOIN DAddress_Master dam on 
dam.profileid = pm.id join Unique_Url_Master um on um.clinicid =dam.id WHERE pm.id in (',@MultiDoctorIds,') 
and dam.id=',@clinicId,' order by CASE WHEN um.clinic_url=''',@ClinicUrl,''' THEN 1 ELSE 2 end,um.clinic_url '); 

select @query; 

это является частью процедуры магазина, когда я исполняю мой SP это показать мне @query NULL но если я сократить мой запрос, то я получаю полный запрос.

есть ли другой способ конкатенации ??

любая помощь оценена.

+1

проверить все пользовательские переменные. Может быть один (или более) из них является нулевым. – 1000111

+1

Кстати, 'SELECT CONCAT ('asdf', NULL)' приводит к 'null' – 1000111

+1

отличный @ClinicUrl был нулевым, это должен быть ClinicUrl (который является параметром, который я прохожу) – Archish

ответ

1

А temporary solution для этого есть, хранить ваши dynamic query в local variable вместо sessional variable с maximum length .like ниже

Declare temp_query varchar(4000); 

set @query:=CONCAT(' SELECT (select GROUP_CONCAT(sp.specialization) FROM DSpecialization_Master dsp LEFT JOIN 
Specialization_Master sp on sp.id = dsp.specialization WHERE dsp.profileid in (', @MultiDoctorIds ,') 
) as drspec,pm.id as profileid,dam.city,um.profile_url FROM Profile_Master pm LEFT JOIN DAddress_Master dam on 
dam.profileid = pm.id join Unique_Url_Master um on um.clinicid =dam.id WHERE pm.id in (',@MultiDoctorIds,') 
and dam.id=',@clinicId,' order by CASE WHEN um.clinic_url=''',@ClinicUrl,''' THEN 1 ELSE 2 end,um.clinic_url '); 

select @query into temp_query; 
select temp_query; 
0

Вы можете установить переменную как

SET @var := hello hello 

Вы должны указать его

MariaDB [(none)]> set @var = hello hello; 
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'hello' at line 1 
MariaDB [(none)]> set @var = "hello hello"; 
Query OK, 0 rows affected (0.00 sec) 

MariaDB [(none)]> select @var; 
+-------------+ 
| @var  | 
+-------------+ 
| hello hello | 
+-------------+ 
1 row in set (0.00 sec) 

MariaDB [(none)]> 
0

я получил еще одно решение:

GROUP_CONCAT максимальная длина является пределом (1024 by default) вы должны изменить длину сеанса области действия его, как показано ниже, что позволит решить ваши неприятности

SET SESSION group_concat_max_len = 25000 ; 

 Смежные вопросы

  • Нет связанных вопросов^_^