Jak vytvorit stored proceduru za behu pres Nette\Database

blueticket
Člen | 41
+
0
-

Zdravim,

narazil jsem na trochu zapeklitej problem. Potreboval bych vytvorit stored proceduru za behu:

$sql = "DELIMITER $$

DROP PROCEDURE IF EXISTS `recalculate_warehouse` $$
CREATE PROCEDURE `recalculate_warehouse`()
BEGIN
    /* BEGIN CREATE BOM */
    DROP TABLE IF EXISTS `sma_bom_temp`;
	.
	.
	.

END$$

DELIMITER ;";

kdyz to vsak takhle predam do $this->database->query($sql); tak dostanu hlasku

„Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‚DELIMITER $$ DROP PROCEDURE IF EXISTS recalculate_warehouse $$ CREATE PROCEDU‘ at line 1“

Nepasoval se s tim uz nekdo z vas? Nevite poradit nejakou zazracnou formulku? :)

Dekuji moc predem

David Matějka
Moderator | 6445
+
+1
-

myslim, ze nemusis resit ten delimiter, ale musis to tam poslat jako samotne dotazy, tedy

$connection->query('DROP PROCEDURE IF EXISTS `recalculate_warehouse');

$connection->query('CREATE PROCEDURE `recalculate_warehouse`()
BEGIN
    /* BEGIN CREATE BOM */
    DROP TABLE IF EXISTS `sma_bom_temp`;
    .
    .
    .

END');
blueticket
Člen | 41
+
0
-

No, one se to pak pokousi spoustet kazdej radek v tele stored procedury samostatne. Proto je tam vlastne i ten set delimiter.

David Matějka
Moderator | 6445
+
0
-

a zkusil si to? mne to totiz funguje.

blueticket
Člen | 41
+
0
-

Jo, promin. Ja Te spatne pochopil a spatne jsem to precetl. Ja psal i jednotlive radky procedury do samostatneho $db->query(). Nevsiml jsem si, ze cely CREATE PROCEDURE davas do jedineho $db->query. Parada, vse funguje jak ma. Dekuji moc!