Utworzenie procedury składowanej w MySQL
DELIMITER $$ CREATE PROCEDURE low_amount() BEGIN SELECT ip.id, ip.product_id, ip.brand_id, ip.amount_alert, ip.is_ordered, SUM(ip.amount) AS suma, p.name AS product, b.initials, b.name AS brand FROM item_packs ip INNER JOIN products p ON p.id=ip.product_id INNER JOIN brands b ON b.id=ip.brand_id GROUP BY ip.product_id, ip.brand_id HAVING suma <= ip.amount_alert; END $$ DELIMITER ;
SHOW PROCEDURE STATUS -- wszystkie procedury SHOW PROCEDURE STATUS [LIKE 'my_procedure' | WHERE search_condition] SHOW CREATE PROCEDURE my_procedure;
DROP PROCEDURE [IF EXISTS] my_procedure; SHOW PROCEDURE STATUS WHERE Db='myDababaseName' \G
DELIMITER $ CREATE PROCEDURE user_projects(p_user_id INT) BEGIN SELECT p.id, p.status_id, COUNT(*) AS count, SUM(p.price) AS total, SUM(p.price * (ch.percent / 100)) AS weighted FROM projects p LEFT JOIN chances ch ON p.chance_id=ch.id WHERE p.manager_id = p_user_id AND p.status_id <> 3 -- bez odrzuconych GROUP BY p.status_id ; END $ DELIMITER ;
Wywołanie procedury w CakePHP 3
$connection = \Cake\Datasource\ConnectionManager::get('default'); $results = $connection->execute('CALL low_amount()')->fetchAll('assoc'); $this->set(compact('results'));