2015-11-12 5 views
1

Я использую хранимую процедуру для создания адаптера таблицы. Это мой синтаксис:(STOREDPROC) Сгенерированный оператор SELECT: поиск правильного синтаксиса для использования около NULL

DELIMITER $$ 

DROP PROCEDURE IF EXISTS `lcs_rdb`.`sp_EmployeeListReport`$$ 

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_EmployeeListReport`(in where_clause TEXT) 
BEGIN 
     SET @sql = CONCAT("SELECT   
       emp.employee_id, 
       group_concat(distinct `ext`.`extension_number` separator ',') AS extension_number, 
       emp.employee_lastname, emp.employee_firstname, 
       dept.department_description, 
       divs.division_description, 
       grps.group_description, 
       st.site_name, emp.audit_date, 
       group_concat(distinct `cst_ctr`.`cost_center_description` separator ',') AS cost_center_description 
       FROM employees emp INNER JOIN 
       employee_extensions emp_ext ON emp_ext.employee_id = emp.employee_id INNER JOIN 
       extensions ext ON ext.extension_id = emp_ext.extension_id INNER JOIN 
       departments dept ON emp.department_id = dept.department_id INNER JOIN 
       divisions divs ON dept.division_id = divs.division_id INNER JOIN 
       groups grps ON divs.group_id = grps.group_id INNER JOIN 
       sites st ON emp.site_id = st.site_id LEFT OUTER JOIN 
       employee_cost_centers emp_cstctr ON emp.employee_id = emp_cstctr.employee_id LEFT OUTER JOIN 
       cost_centers cst_ctr ON emp_cstctr.cost_center_id = cst_ctr.cost_center_id 
       where ", where_clause ,""); 
PREPARE stmt FROM @sql; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 
    END$$ 

DELIMITER ; 

Это ошибка, когда я выполнил его:
«Сформирован ЗЕЬЕСТ У вас ошибка в вашем синтаксисе SQL, проверьте руководство, которое соответствует Вашей версии сервера MySQL для. правильный синтаксис для использования рядом с «NULL» по строке 1 »

Я думаю, проблема в предложении where. Но я не знаю, как это исправить. Пожалуйста помоги. Благодарю.

ответ

0

CONCAT() возвращает NULL, если любые значения NULL. Возможно, вы хотите что-то вроде:

CONCAT('select . . .', 
     COALESCE(where_clause, '1 = 1')) 
+0

Ой, подождите. Посмотрите на мой код. :(он говорит: ** Аргумент не указан для параметра 'where_clause' of 'Public Overridable Overloads Function Fill (dataTable как LCSRDBDataSet.CostCenterStandardDataTable, where_clause As String) As Integer'. ** Синтаксис: * daCostCenterStandard.Fill (dtCostCenterStandard) * –

+0

Как бы то ни было, * правильный синтаксис для использования рядом с «NULL» в строке 1 * ошибка из подготовленного оператора означает, что '@ sql' ** действительно null **, потому что хотя бы один из аргументов (неожиданно) null. Решение будет включать в себя выяснение, какой из них. –