---
title: "MySql, Stored Procedure"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/141941-mysql-stored-procedure"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "DavidB"
published: "2006-02-02T20:00:09.000Z"
updated: "2006-02-08T15:08:10.000Z"
replies: 10
views: 1483
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/databaser-sql/141941-mysql-stored-procedure"
---

# MySql, Stored Procedure

## #1 — DavidB, 2006-02-02T20:00Z

Tjena

Försöker mig på att göra några Stored Procedures i MySql men får inte riktigt till det som jag vill ha det.

Funktionen är att jag vill lägga in data i databasen, sen hämta ut det ID på den rad som skapades och sedan lägga in ytteligare en rad där detta ID används utan att det skall returnera någonting

```
declare [b]insertId[/b] Int;

INSERT Into users (username,password,email)
            values(UserName,Password,Email);

SELECT last_insert_id() INTO [b]insertId[/b] from users;

INSERT Into users_events (user_id,datetime,ip)
                   values([b]insertId[/b],DateTime,IP);
```

Vet inte ens om jag är rätt ute, jag får följande fel:
\#42000Result consisted of more than one row

Nån som har en ide?

Permalänk: https://www.webforum.nu/p/141941

## #2 — Compusa, 2006-02-02T23:11Z

JFGI ;)

> When using INTO variables, it must return exactly one row, but apparently it does not. Either make the WHERE select a unique row,
> or use LIMIT 1 to enforce a single result (which assumes that you want the first one).

Permalänk: https://www.webforum.nu/p/1760266

## #3 — DavidB, 2006-02-03T11:54Z

Fungerade utmärkt, tack!

Permalänk: https://www.webforum.nu/p/1760469

## #4 — LarsG, 2006-02-03T12:32Z

Du behöver inte blanda in select into och någon tabell

```
SET insertId = last_insert_id();
```

Permalänk: https://www.webforum.nu/p/1760480

## #5 — DavidB, 2006-02-07T19:05Z

Tackar, gav lite mindre kod.

Har stött på ett annat problem, får inte IF-satsen att fungera.

```
  declare UserId int;
  declare Comment varchar(45);

  select id from users where username = Usr AND password = Pwd;
  set UserId = id;

  if UserId > 0 then
    Comment = 'sadsad';
  else
    Comment = 'saddsa';
  end if;
```

Permalänk: https://www.webforum.nu/p/1761918

## #6 — DavidB, 2006-02-07T20:03Z

```
  declare UserId int;
  declare Comment varchar(45);

  select id from users where username = Usr AND password = Pwd;
  set UserId = id;

  if UserId > 0 then
    [b]SET[/b] Comment = 'sadsad';
  else
    [b]SET[/b] Comment = 'saddsa';
  end if;
```

 :OO

Permalänk: https://www.webforum.nu/p/1761925

## #7 — LarsG, 2006-02-07T21:46Z

```
if  exists (select * from users where username = Usr AND password = Pwd) then
    SET Comment = 'sadsad';
else
    SET Comment = 'saddsa';
end if;
```

eller vad är problemet?

Permalänk: https://www.webforum.nu/p/1761951

## #8 — Peter S, 2006-02-07T22:08Z

Skulle gissa på att David i inlägg #5 glömde 'SET' i if-satsen.

 :)

Permalänk: https://www.webforum.nu/p/1761958

## #9 — LarsG, 2006-02-07T22:18Z

Jo, men jag förstår inte hur 

```
select id from users where username = Usr AND password = Pwd;
set UserId = id;
```

skulle fungera.

Permalänk: https://www.webforum.nu/p/1761960

## #10 — DavidB, 2006-02-08T13:02Z

LarsG:
Du har helt rätt. Det fungerade inte, fick inte tid att testa igår.

Problem återstår, det jag vill är att ID't på användaren skall sparas i UserId för att sedan användas
i en INSERT i en annan tabell.

Dessutom vill jag att UserId skall "returneras" till min applikation, hur gör jag detta?

Bifogar hela proceduren:

```
DELIMITER $$

DROP PROCEDURE IF EXISTS `db`.`ValidateUser` $$
CREATE PROCEDURE `ValidateUser`(IN UserName varchar(45),
				IN Pass varchar(45),
				IN IP varchar(14),
				IN DateTime DateTime)
BEGIN
	declare UserId int;
	declare Comment varchar(45);

	select id from users where username = UserName AND password = Pass limit 1;
	SET UserId = id;

	if UserId > 0 then
		SET Comment = 'Success';
	else
		SET Comment = 'Failure';
	end if;

	insert into events (user_id,datetime,ip,comment)
	values(UserId,DateTime,IP,Comment);
END $$

DELIMITER ;
```

Permalänk: https://www.webforum.nu/p/1762100

## #11 — LarsG, 2006-02-08T15:08Z

```
declare UserId int;
select id into userid from users where username = UserName AND password = Pass;
if  userid is null then
-- ingen användare med detta namn finns, vidtag lämplig åtgärd
else
-- användare funnen 
end if;
```

Permalänk: https://www.webforum.nu/p/1762144

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/141941-mysql-stored-procedure
