Я использую CALL для вызова моей функции внутри хранимой процедуры, но не работает
CALL
не используется для выполнения функции.
Оператор CALL
Оператор CALL вызывает хранимую процедуру, которая была ранее определена с помощью CREATE PROCEDURE.
это зацикливает пользователей таблицы с помощью курсора и копирует все идентификаторы пользователей в таблицу user_rank.
Почему так сложно? процедура, курсор, обработчик, l oop ... достаточно простого запроса:
INSERT INTO user_rank (id, has_hobbies)
SELECT user_id, hasUserPassedTest(user_id)
FROM users;
UPDATE
Вставка может сочетаться с созданием таблицы:
CREATE TABLE `user_rank` (
`id` int(11) UNSIGNED NOT NULL,
`has_hobbies` int(3) DEFAULT 0,
`passed_test` int(3) DEFAULT 0,
`has_picture` int(3) DEFAULT 0,
`won_a_job` int(3) DEFAULT 0,
`is_prolancer` int(3) DEFAULT 0,
`is_verified` int(3) DEFAULT 0,
`has_portfolio` int(3) DEFAULT 0,
`has_likes` int(3) DEFAULT 0,
`has_disputes` int(3) DEFAULT 0,
`has-earnings` int(3) DEFAULT 0,
`has_feebacks` int(3) DEFAULT 0,
`has_invitations` int(3) DEFAULT 0,
`has_views` int(3) DEFAULT 0
) ENGINE=InnoDB DEFAULT CHARSET=utf8
SELECT user_id AS id, hasUserPassedTest(user_id) AS has_hobbies
FROM users;
Одна тонкость - вставленные поля будут последними в структуре таблицы. Если порядок полей имеет смысл, то все поля должны быть упомянуты в выделенной части:
CREATE TABLE `user_rank` (
`id` int(11) UNSIGNED NOT NULL,
`has_hobbies` int(3) DEFAULT 0,
`passed_test` int(3) DEFAULT 0,
`has_picture` int(3) DEFAULT 0,
`won_a_job` int(3) DEFAULT 0,
`is_prolancer` int(3) DEFAULT 0,
`is_verified` int(3) DEFAULT 0,
`has_portfolio` int(3) DEFAULT 0,
`has_likes` int(3) DEFAULT 0,
`has_disputes` int(3) DEFAULT 0,
`has-earnings` int(3) DEFAULT 0,
`has_feebacks` int(3) DEFAULT 0,
`has_invitations` int(3) DEFAULT 0,
`has_views` int(3) DEFAULT 0
) ENGINE=InnoDB DEFAULT CHARSET=utf8
SELECT user_id AS id,
hasUserPassedTest(user_id) AS has_hobbies
0 AS `passed_test`,
0 AS `has_picture`,
0 AS `won_a_job`,
0 AS `is_prolancer`,
0 AS `is_verified`,
0 AS `has_portfolio`,
0 AS `has_likes`,
0 AS `has_disputes`,
0 AS `has-earnings`,
0 AS `has_feebacks`,
0 AS `has_invitations`,
0 AS `has_views`
FROM users;
DROP TABLE
остается отдельным запросом: (