webForumDet fria alternativet

Problem med att skapa en SP i mysql

Databaser & SQL

9 svar · 680 visningar · startad av Travoni

Medlem sedan okt. 20041 556 inlägg
Frågan#1

Fösöker att skapa en SP i mysql (5), men jag får syntax error på rad 20 (near '') Vad kan det vara för fel?

CREATE PROCEDURE procUseTemp(sIds varchar(500)) 
BEGIN 
DECLARE FirstPos INT;
DECLARE FirstPos1 INT;
DECLARE SecondPos INT; 
SET FirstPos=1;
	IF (LENGTH(sIds) > 0) THEN
        DROP TABLE IF EXISTS TempTable;
        CREATE TEMPORARY TABLE TempTable(id int) ENGINE=MEMORY;
		SET SecondPos = LOCATE(',',sIds,FirstPos);
		WHILE (SecondPos>0) DO
			INSERT INTO TempTable
			VALUES(cast(substring(sIds, FirstPos, (SecondPos - FirstPos)) as INT));
			set FirstPos=SecondPos+1;
			SET SecondPos=LOCATE(',',sIds,FirstPos);
		END WHILE;
		INSERT INTO TempTable
		VALUES(cast(right(sIds, LENGTH(sIds) - FirstPos + 1 ) as INT));
	END IF;
SELECT id FROM TempTable; 
END;

/R Jag kom på att det var fel SP jag bifogat, men jag får samma fel på den.
Men På denna kod:

...syntax to use near ';
			set FirstPos=SecondPos+1;
			SET SecondPos=LOCATE(',',sIds,FirstPos);
Medlem sedan jan. 20022 440 inlägg
#2

Det är någon av raderna

SET LOC = LOCATE(', ',REM);

som spökar, kontrollera dem.

Kanske är själva inserten förresten

INSERT INTO TempTable VALUES(REM);

REM är '' eller nåt i den stilen. Jag kan inte mySQL

Medlem sedan okt. 20041 556 inlägg
#3

Ok, se editering.

Medlem sedan jan. 20022 440 inlägg
#4

Du har fortfarande fel på raderna med LOCATE, vad vill du med LOCATE(',' ?

Försöker du ta bort kommat?

Medlem sedan dec. 200012 464 inlägg
#5

Om du gör en cast till int så måste du ange signed eller unsigned.

Vad är det för fel med locate?

Medlem sedan okt. 20041 556 inlägg
#6

Jag lyckas ta mej sjuttsingen inte få till denna heller.
Hittad här: http://forge.mysql.com/snippets/view.php?id=4
Fel på rad 19...

CREATE PROCEDURE split_string (IN input TEXT, IN delimiter VARCHAR(10) ) 
SQL SECURITY INVOKER
COMMENT 'Splits a supplied string using using the given delimiter, 
placing values in a temporary table'
BEGIN
    DECLARE cur_position INT DEFAULT 1 ;
    DECLARE remainder TEXT;
    DECLARE cur_string VARCHAR(1000);
    DECLARE delimiter_length TINYINT UNSIGNED;
    DROP TEMPORARY TABLE IF EXISTS SplitValues;
    CREATE TEMPORARY TABLE SplitValues (
    value VARCHAR(1000) NOT NULL PRIMARY KEY
    ) ENGINE=MEMORY;
    SET remainder = input;
    SET delimiter_length = CHAR_LENGTH(delimiter);
        WHILE CHAR_LENGTH(remainder) > 0 AND cur_position > 0 DO
            SET cur_position = INSTR(remainder, delimiter);
            IF cur_position = 0 THEN
              SET cur_string = remainder;
            ELSE
                SET cur_string = LEFT(remainder, cur_position - 1);
            [B]END IF;[/B]
            IF TRIM(cur_string) != '' THEN
              INSERT INTO SplitValues VALUES (cur_string);
            END IF;
            SET remainder = SUBSTRING(remainder, cur_position + delimiter_length);
        END WHILE;
END;
Medlem sedan okt. 20041 556 inlägg
#7

I mysql/phpadmin får jag felet på denna rad: DECLARE cur_position INT DEFAULT 1 ;

Medlem sedan okt. 20041 556 inlägg
#8

...Det var hela tiden GUIEN som jag jobbade i som fukcade upp allt. När jag skapade en egen "editor" i presentationslagret så gick det alldeles utmärkt att skapa SP'n. :)

Otroligt att man skall behöva skapa ett eget verktyg för att editera sqler... ;)

Medlem sedan feb. 20013 023 inlägg
#9

Vilken sql-editor använde du?

Medlem sedan okt. 20041 556 inlägg
#10

myPHPAdmin och mySql Front 3.2

135 ms totalt · 2 externa anrop · v20260731065814-full.2ae45ccc
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)