Query to Stored Procedure Error

Συζητήσεις για την βάση δεδομένων MySQL και το phpMyAdmin

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Antonis78
Δημοσιεύσεις: 60
Εγγραφή: 24 Φεβ 2006 14:41

Query to Stored Procedure Error

Δημοσίευση από Antonis78 » 22 Μαρ 2012 09:26

Καλημέρα σε όλους!

Έγραψα ένα sql το οποίο όταν το τρέχω σαν απλό query τρέχει κανονικά. Όταν προσπαθώ να το μετατρέψω σε stored procedure μου βγάζει syntax error. Μήπως μπορεί κάποιος να με βοήθησει στο stored procedure;

Παραθέρτω το sql

Κώδικας: Επιλογή όλων

SET @counter_1=0; 
SET @counter_2=0; 

INSERT INTO Categories (sapCode, page, `order`, publish, storeId, parentId) 
SELECT 
c.sapCode, 
c.page, 
c.order, 
c.publish, 
d.storeId, 
d.newId 
FROM 
(SELECT 
sapCode, 
page, 
`order`, 
publish, 
parentId 
FROM 
Categories 
WHERE 
parentId <> 0 AND 
storeId = 1&#41; AS c 
INNER JOIN 
&#40;SELECT 
a.oldId, 
b.newId, 
b.storeId 
FROM 
&#40;SELECT 
Categories.id AS oldId, 
@counter_1&#58;=@counter_1+1 AS counter 
FROM 
Categories 
WHERE 
Categories.storeId = 1 AND 
Categories.parentId = 0&#41; AS a 
INNER JOIN 
&#40;SELECT 
id AS newId, 
storeId, 
@counter_2&#58;=@counter_2+1 AS counter 
FROM 
Categories 
WHERE storeId = 2 AND 
parentId = 0&#41; AS b 
ON a.counter = b.counter&#41; AS d ON c.parentId = d.oldId
Ευχαριστώ πολύ!

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Query to Stored Procedure Error

Δημοσίευση από dva_dev » 22 Μαρ 2012 10:31

Για δοκίμασε κάπως έτσι:

Κώδικας: Επιλογή όλων

DELIMITER $$

DROP PROCEDURE IF EXISTS `spTest` $$
CREATE PROCEDURE `spTest`&#40;counter_1 INT, counter_2 INT&#41;
BEGIN
INSERT INTO Categories &#40;sapCode, page, `order`, publish, storeId, parentId&#41;
SELECT c.sapCode, c.page, c.order, c.publish, d.storeId, d.newId
FROM
&#40;
	SELECT sapCode, page, `order`, publish, parentId
	FROM Categories
	WHERE parentId <> 0 AND storeId = 1
&#41; AS c
INNER JOIN
&#40;
	SELECT a.oldId, b.newId, b.storeId
	FROM
	&#40;
		SELECT Categories.id AS oldId, counter_1=counter_1+1 AS counter
		FROM Categories
		WHERE Categories.storeId = 1 AND Categories.parentId = 0
	&#41; AS a
	INNER JOIN
	&#40;
		SELECT id AS newId, storeId, counter_2=counter_2+1 AS counter
		FROM Categories
		WHERE storeId = 2 AND parentId = 0
	&#41; AS b
	ON a.counter = b.counter
&#41; AS d
ON c.parentId = d.oldId;
END $$

DELIMITER ;

Antonis78
Δημοσιεύσεις: 60
Εγγραφή: 24 Φεβ 2006 14:41

Query to Stored Procedure Error

Δημοσίευση από Antonis78 » 22 Μαρ 2012 10:45

Σε ευχαριστώ για την απάντηση. Μία ερώτηση, σε αυτό που έγραψες δεν βλέπω να γίνονται DECLARE οι μεταβλητές counter_1 και counter_2 που χρειάζομαι. Δεν είναι απαραίτητο;

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Query to Stored Procedure Error

Δημοσίευση από dva_dev » 22 Μαρ 2012 10:48

Είναι σαν παράμετροι. Αν το θέλεις τις βγάζεις από εκεί και τις κάνεις declare

Antonis78
Δημοσιεύσεις: 60
Εγγραφή: 24 Φεβ 2006 14:41

Query to Stored Procedure Error

Δημοσίευση από Antonis78 » 22 Μαρ 2012 10:52

οκ, θα το δοκιμάσω και θα σου πω.

Antonis78
Δημοσιεύσεις: 60
Εγγραφή: 24 Φεβ 2006 14:41

Query to Stored Procedure Error

Δημοσίευση από Antonis78 » 22 Μαρ 2012 10:59

Δημιουργήθηκε αλλά δεν δουλεύει σωστά. Οι δύο variables που κάνω SET (counter_1 & counter_2) είναι δύο μεταβλητές που πρέπει να γίνονται increment για να μπορέσω να κάνω το JOIN των δύο πινάκων. Όταν τρέχω την procedure προσθέτει 4000 rows αντί για 500

Antonis78
Δημοσιεύσεις: 60
Εγγραφή: 24 Φεβ 2006 14:41

Query to Stored Procedure Error

Δημοσίευση από Antonis78 » 22 Μαρ 2012 11:37

Το βρήκα. Όταν έγραφα το procedure δεν έβαζα ; στο τέλος του τελευταίου statement και επιπλέον το πρόγραμμα που χρησιμοποιούσα έβαζε σκουπίδια που χτύπαγαν. Τέλος καλό, όλα καλά. Ευχαριστώ για την βοήθεια!

Απάντηση

Επιστροφή στο “MySQL”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες