2015-12-22 2 views
0

Прошу прощения, чтобы опубликовать такой вопрос низкого качества, но я действительно в недоумении. Я не могу создать эту хранимую процедуру, потому что workbench продолжает говорить мне, что у меня есть синтаксические ошибки ... Две ошибки окружены *** s и находятся в строке 6.Workbench вызывает ошибку в следующем запросе. Зачем?

Когда я пытаюсь сохранить хранимую процедуру, имя автоматически анализируется на _SYNTAX_ERROR в верстаке, а sql не выполняется.

CREATE PROCEDURE fetchBudgetInfo(IN year YEAR, IN costCenter INT(11)) 
BEGIN 
    BEGIN 
    SELECT gls.gl, gls.name AS gl_name, IFNULL(budgets.total, 0) as totalBudgeted, 
     IFNULL(ROUND(SUM(CASE WHEN requests.ap = (SELECT id FROM ap WHERE ap.ap = 1 AND YEAR(ap.start_date) = year) THEN totalCost ELSE 0 END), 2), 0) AS ap1, 
     IFNULL(ROUND(SUM(CASE WHEN requests.ap = (SELECT id FROM ap WHERE ap.ap = 1 AND YEAR(ap.start_date) = year) THEN totalCost ELSE 0 END)/((SELECT total FROM budgets WHERE costCenter = costCenter AND gl = gls.id AND YEAR(budgets.year) = year)***Error HERE (missing closing bracket)***/12) * 100, 2), 0 ***Error HERE (missing semicolon)***) AS ap1Ap, 
     IFNULL(ROUND(SUM(CASE WHEN requests.ap = (SELECT id FROM ap WHERE ap.ap = 1 AND YEAR(ap.start_date) = year) THEN totalCost ELSE 0 END)/(SELECT total FROM budgets WHERE costCenter = costCenter AND gl = gls.id AND YEAR(budgets.year) = year) * 100, 2), 0) AS ap1Year, 

     IFNULL(ROUND(SUM(CASE WHEN requests.ap = (SELECT id FROM ap WHERE ap.ap = 2 AND YEAR(ap.start_date) = year) THEN totalCost ELSE 0 END), 2), 0) AS ap2, 
     IFNULL(ROUND(SUM(CASE WHEN requests.ap = (SELECT id FROM ap WHERE ap.ap = 2 AND YEAR(ap.start_date) = year) THEN totalCost ELSE 0 END)/((SELECT total FROM budgets WHERE costCenter = costCenter AND gl = gls.id AND YEAR(budgets.year) = year)/12) * 100, 2), 0) AS ap2Ap, 
     IFNULL(ROUND(SUM(CASE WHEN requests.ap = (SELECT id FROM ap WHERE ap.ap = 2 AND YEAR(ap.start_date) = year) THEN totalCost ELSE 0 END)/(SELECT total FROM budgets WHERE costCenter = costCenter AND gl = gls.id AND YEAR(budgets.year) = year) * 100, 2), 0) AS ap2Year, 

     IFNULL(ROUND(SUM(CASE WHEN requests.ap = (SELECT id FROM ap WHERE ap.ap = 3 AND YEAR(ap.start_date) = year) THEN totalCost ELSE 0 END), 2), 0) AS ap3, 
     IFNULL(ROUND(SUM(CASE WHEN requests.ap = (SELECT id FROM ap WHERE ap.ap = 3 AND YEAR(ap.start_date) = year) THEN totalCost ELSE 0 END)/((SELECT total FROM budgets WHERE costCenter = costCenter AND gl = gls.id AND YEAR(budgets.year) = year)/12) * 100, 2), 0) AS ap3Ap, 
     IFNULL(ROUND(SUM(CASE WHEN requests.ap = (SELECT id FROM ap WHERE ap.ap = 3 AND YEAR(ap.start_date) = year) THEN totalCost ELSE 0 END)/(SELECT total FROM budgets WHERE costCenter = costCenter AND gl = gls.id AND YEAR(budgets.year) = year) * 100, 2), 0) AS ap3Year, 

     IFNULL(ROUND(SUM(CASE WHEN requests.ap = (SELECT id FROM ap WHERE ap.ap = 4 AND YEAR(ap.start_date) = year) THEN totalCost ELSE 0 END), 2), 0) AS ap4, 
     IFNULL(ROUND(SUM(CASE WHEN requests.ap = (SELECT id FROM ap WHERE ap.ap = 4 AND YEAR(ap.start_date) = year) THEN totalCost ELSE 0 END)/((SELECT total FROM budgets WHERE costCenter = costCenter AND gl = gls.id AND YEAR(budgets.year) = year)/12) * 100, 2), 0) AS ap4Ap, 
     IFNULL(ROUND(SUM(CASE WHEN requests.ap = (SELECT id FROM ap WHERE ap.ap = 4 AND YEAR(ap.start_date) = year) THEN totalCost ELSE 0 END)/(SELECT total FROM budgets WHERE costCenter = costCenter AND gl = gls.id AND YEAR(budgets.year) = year) * 100, 2), 0) AS ap4Year, 

     IFNULL(ROUND(SUM(CASE WHEN requests.ap = (SELECT id FROM ap WHERE ap.ap = 5 AND YEAR(ap.start_date) = year) THEN totalCost ELSE 0 END), 2), 0) AS ap5, 
     IFNULL(ROUND(SUM(CASE WHEN requests.ap = (SELECT id FROM ap WHERE ap.ap = 5 AND YEAR(ap.start_date) = year) THEN totalCost ELSE 0 END)/((SELECT total FROM budgets WHERE costCenter = costCenter AND gl = gls.id AND YEAR(budgets.year) = year)/12) * 100, 2), 0) AS ap5Ap, 
     IFNULL(ROUND(SUM(CASE WHEN requests.ap = (SELECT id FROM ap WHERE ap.ap = 5 AND YEAR(ap.start_date) = year) THEN totalCost ELSE 0 END)/(SELECT total FROM budgets WHERE costCenter = costCenter AND gl = gls.id AND YEAR(budgets.year) = year) * 100, 2), 0) AS ap5Year, 

     IFNULL(ROUND(SUM(CASE WHEN requests.ap = (SELECT id FROM ap WHERE ap.ap = 6 AND YEAR(ap.start_date) = year) THEN totalCost ELSE 0 END), 2), 0) AS ap6, 
     IFNULL(ROUND(SUM(CASE WHEN requests.ap = (SELECT id FROM ap WHERE ap.ap = 6 AND YEAR(ap.start_date) = year) THEN totalCost ELSE 0 END)/((SELECT total FROM budgets WHERE costCenter = costCenter AND gl = gls.id AND YEAR(budgets.year) = year)/12) * 100, 2), 0) AS ap6Ap, 
     IFNULL(ROUND(SUM(CASE WHEN requests.ap = (SELECT id FROM ap WHERE ap.ap = 6 AND YEAR(ap.start_date) = year) THEN totalCost ELSE 0 END)/(SELECT total FROM budgets WHERE costCenter = costCenter AND gl = gls.id AND YEAR(budgets.year) = year) * 100, 2), 0) AS ap6Year, 

     IFNULL(ROUND(SUM(CASE WHEN requests.ap = (SELECT id FROM ap WHERE ap.ap = 7 AND YEAR(ap.start_date) = year) THEN totalCost ELSE 0 END), 2), 0) AS ap7, 
     IFNULL(ROUND(SUM(CASE WHEN requests.ap = (SELECT id FROM ap WHERE ap.ap = 7 AND YEAR(ap.start_date) = year) THEN totalCost ELSE 0 END)/((SELECT total FROM budgets WHERE costCenter = costCenter AND gl = gls.id AND YEAR(budgets.year) = year)/12) * 100, 2), 0) AS ap7Ap, 
     IFNULL(ROUND(SUM(CASE WHEN requests.ap = (SELECT id FROM ap WHERE ap.ap = 7 AND YEAR(ap.start_date) = year) THEN totalCost ELSE 0 END)/(SELECT total FROM budgets WHERE costCenter = costCenter AND gl = gls.id AND YEAR(budgets.year) = year) * 100, 2), 0) AS ap7Year, 

     IFNULL(ROUND(SUM(CASE WHEN requests.ap = (SELECT id FROM ap WHERE ap.ap = 8 AND YEAR(ap.start_date) = year) THEN totalCost ELSE 0 END), 2), 0) AS ap8, 
     IFNULL(ROUND(SUM(CASE WHEN requests.ap = (SELECT id FROM ap WHERE ap.ap = 8 AND YEAR(ap.start_date) = year) THEN totalCost ELSE 0 END)/((SELECT total FROM budgets WHERE costCenter = costCenter AND gl = gls.id AND YEAR(budgets.year) = year)/12) * 100, 2), 0) AS ap8Ap, 
     IFNULL(ROUND(SUM(CASE WHEN requests.ap = (SELECT id FROM ap WHERE ap.ap = 8 AND YEAR(ap.start_date) = year) THEN totalCost ELSE 0 END)/(SELECT total FROM budgets WHERE costCenter = costCenter AND gl = gls.id AND YEAR(budgets.year) = year) * 100, 2), 0) AS ap8Year, 

     IFNULL(ROUND(SUM(CASE WHEN requests.ap = (SELECT id FROM ap WHERE ap.ap = 9 AND YEAR(ap.start_date) = year) THEN totalCost ELSE 0 END), 2), 0) AS ap9, 
     IFNULL(ROUND(SUM(CASE WHEN requests.ap = (SELECT id FROM ap WHERE ap.ap = 9 AND YEAR(ap.start_date) = year) THEN totalCost ELSE 0 END)/((SELECT total FROM budgets WHERE costCenter = costCenter AND gl = gls.id AND YEAR(budgets.year) = year)/12) * 100, 2), 0) AS ap9Ap, 
     IFNULL(ROUND(SUM(CASE WHEN requests.ap = (SELECT id FROM ap WHERE ap.ap = 9 AND YEAR(ap.start_date) = year) THEN totalCost ELSE 0 END)/(SELECT total FROM budgets WHERE costCenter = costCenter AND gl = gls.id AND YEAR(budgets.year) = year) * 100, 2), 0) AS ap9Year, 

     IFNULL(ROUND(SUM(CASE WHEN requests.ap = (SELECT id FROM ap WHERE ap.ap = 10 AND YEAR(ap.start_date) = year) THEN totalCost ELSE 0 END), 2), 0) AS ap10, 
     IFNULL(ROUND(SUM(CASE WHEN requests.ap = (SELECT id FROM ap WHERE ap.ap = 10 AND YEAR(ap.start_date) = year) THEN totalCost ELSE 0 END)/((SELECT total FROM budgets WHERE costCenter = costCenter AND gl = gls.id AND YEAR(budgets.year) = year)/12) * 100, 2), 0) AS ap10Ap, 
     IFNULL(ROUND(SUM(CASE WHEN requests.ap = (SELECT id FROM ap WHERE ap.ap = 10 AND YEAR(ap.start_date) = year) THEN totalCost ELSE 0 END)/(SELECT total FROM budgets WHERE costCenter = costCenter AND gl = gls.id AND YEAR(budgets.year) = year) * 100, 2), 0) AS ap10Year, 

     IFNULL(ROUND(SUM(CASE WHEN requests.ap = (SELECT id FROM ap WHERE ap.ap = 11 AND YEAR(ap.start_date) = year) THEN totalCost ELSE 0 END), 2), 0) AS ap11, 
     IFNULL(ROUND(SUM(CASE WHEN requests.ap = (SELECT id FROM ap WHERE ap.ap = 11 AND YEAR(ap.start_date) = year) THEN totalCost ELSE 0 END)/((SELECT total FROM budgets WHERE costCenter = costCenter AND gl = gls.id AND YEAR(budgets.year) = year)/12) * 100, 2), 0) AS ap11Ap, 
     IFNULL(ROUND(SUM(CASE WHEN requests.ap = (SELECT id FROM ap WHERE ap.ap = 11 AND YEAR(ap.start_date) = year) THEN totalCost ELSE 0 END)/(SELECT total FROM budgets WHERE costCenter = costCenter AND gl = gls.id AND YEAR(budgets.year) = year) * 100, 2), 0) AS ap11Year, 

     IFNULL(ROUND(SUM(CASE WHEN requests.ap = (SELECT id FROM ap WHERE ap.ap = 12 AND YEAR(ap.start_date) = year) THEN totalCost ELSE 0 END), 2), 0) AS ap12, 
     IFNULL(ROUND(SUM(CASE WHEN requests.ap = (SELECT id FROM ap WHERE ap.ap = 12 AND YEAR(ap.start_date) = year) THEN totalCost ELSE 0 END)/((SELECT total FROM budgets WHERE costCenter = costCenter AND gl = gls.id AND YEAR(budgets.year) = year)/12) * 100, 2), 0) AS ap12Ap, 
     IFNULL(ROUND(SUM(CASE WHEN requests.ap = (SELECT id FROM ap WHERE ap.ap = 12 AND YEAR(ap.start_date) = year) THEN totalCost ELSE 0 END)/(SELECT total FROM budgets WHERE costCenter = costCenter AND gl = gls.id AND YEAR(budgets.year) = year) * 100, 2), 0) AS ap12Year, 

     IFNULL(ROUND(SUM(totalCost), 2), 0) AS totalCost, 
     IFNULL(ROUND(SUM(totalCost)/(SELECT total FROM budgets WHERE budgets.costCenter = costCenter AND budgets.gl = gls.id) * 100, 2), 0) AS totalPercent 

    FROM gls 
     LEFT JOIN requests ON requests.glid = gls.id AND requests.costCenter = costCenter AND requests.status = 'approved' AND (SELECT YEAR(ap.start_date) FROM ap WHERE ap.id = requests.ap) = year 
     LEFT JOIN budgets ON budgets.gl = gls.id AND budgets.costCenter = costCenter 

    GROUP BY gls.id; 
END 

EDIT

Это также не ....

CREATE PROCEDURE fetchBudgetInfo(IN year YEAR, IN costCenter INT(11)) 
BEGIN 
    SELECT gls.id, gls.gl, gls.name AS gl_name, budgets.total as totalBudgeted 

    GROUP BY gls.id; 
END 
+0

Вы можете работать как отдельный sql вне SP? – DaveTheRave

+0

Нет, такая же ошибка –

+0

что я делаю, когда получаю загадочную ошибку (и получаю ее). Удаляет первую половину секции выбора и видит, компилируется ли она и запускается за пределами SP. Затем я продолжаю добавлять половину назад ... пока не найду линию, которая меня убивает. – DaveTheRave

ответ

0

Оба запроса неверны. Первый использует второй BEGIN (без закрытия END), а во втором отсутствует пункт from.

0

нормально .. что я делаю здесь, это удалить все подзапросы и заменить константами - потому, что в данный момент мы не заботиться о ответе .. мы заботимся о запуске и возвращении данных.(), но сохраните все скобки и т. д. и сварить их до базовой структуры. Я могу получить это, чтобы вернуться в верстаке .. Тогда я бы добавить подзапросов назад по одному за раз, чтобы «увидеть», если его нарушение на суб выбрать или он все еще работает ..

Select 

IFNULL(ROUND(SUM(CASE WHEN 1 = (1) THEN 10 ELSE 0 END), 2), 0) AS ap2, 
IFNULL(ROUND(SUM(CASE WHEN 1 = (0) THEN 20 ELSE 0 END)/((1)/12) * 100, 2), 0) AS ap2Ap 

from test.maketable 
group by make 

Это может пролить свет о том, каков настоящий виновник.

+0

см. Редактирование, которое я добавил –

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