webentwicklung-frage-antwort-db.com.de

MySQL erstellt Syntax für gespeicherte Prozeduren mit Trennzeichen

Ich versuche, eine gespeicherte Prozedur in MySQL mit einem Trennzeichen wie dem folgenden zu erstellen:

use am;

DELIMITER $$

CREATE PROCEDURE addfields()
BEGIN
  DECLARE done INT DEFAULT FALSE;
  DECLARE acc INT(16);
  DECLARE validId INT DEFAULT 0;

END $$

DELIMITER ;

Es gibt einen Fehler:

#1304 - PROCEDURE addfields already exists

Was ist die richtige Syntax, um eine gespeicherte Prozedur mit einem Trennzeichen zu erstellen und sie zu löschen, wenn sie zuerst existiert?

36

Hier ist das Beispiel MYSQL Stored Procedure mit Trennzeichen und wie man aufruft ..

DELIMITER $$

DROP PROCEDURE IF EXISTS `sp_user_login` $$
CREATE DEFINER=`root`@`%` PROCEDURE `sp_user_login`(
  IN loc_username VARCHAR(255),
  IN loc_password VARCHAR(255)
)
BEGIN

  SELECT user_id,
         user_name,
         user_emailid,
         user_profileimage,
         last_update
    FROM tbl_user
   WHERE user_name = loc_username
     AND password = loc_password
     AND status = 1;

END $$

DELIMITER ;

und call by, mysql_connection-Spezifikation und

$loginCheck="call sp_user_login('".$username."','".$password."');";

das Ergebnis wird aus der Prozedur zurückgegeben.

51
MKV

Erste Schritte mit der Prozedur für gespeicherte Prozeduren in MySQL:

Gute Programmierer nutzen das Terminal, die GUI macht Sie weich in der Mitte. Wenn Sie sich daran gewöhnen und die Befehle speichern, ist sie fünfmal schneller als jede GUI. Produktivität = Erfolg.

1. Öffnen Sie ein Terminal und melden Sie sich wie folgt bei mysql an:

[email protected]:~$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
mysql> 

2. Schauen Sie nach, ob Sie Prozeduren haben.

mysql> show procedure status;
+-----------+---------------+-----------+---------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
| Db        | Name          | Type      | Definer | Modified            | Created             | Security_type | Comment | character_set_client | collation_connection | Database Collation |
+-----------+---------------+-----------+---------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
|   yourdb  | sp_user_login | PROCEDURE | [email protected]%  | 2013-12-06 14:10:25 | 2013-12-06 14:10:25 | DEFINER       |         | utf8                 | utf8_general_ci      | latin1_swedish_ci  |
+-----------+---------------+-----------+---------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
1 row in set (0.01 sec)

Ich habe eine definiert, Sie haben wahrscheinlich keine, um anzufangen.

3. Wechseln Sie in die Datenbank, löschen Sie sie. 

mysql> use yourdb;
Database changed

mysql> drop procedure if exists sp_user_login;
Query OK, 0 rows affected (0.01 sec)

mysql> show procedure status;
Empty set (0.00 sec)

4. Ok Nun habe ich keine gespeicherten Prozeduren definiert. Machen Sie die einfachste:

mysql> delimiter //
mysql> create procedure foobar()
    -> begin select 'hello'; end//
Query OK, 0 rows affected (0.00 sec)

Das // kommuniziert mit dem Terminal, wenn Sie die Befehle für die gespeicherte Prozedur eingegeben haben. Der Name der gespeicherten Prozedur lautet foobar. Es nimmt keine Parameter und sollte "Hallo" zurückgeben.

5. Sehen Sie, wenn es dort ist, denken Sie daran, Ihr Trennzeichen zurückzusetzen !:

 mysql> show procedure status;
 -> 
 -> 

Erwischt! Warum hat das nicht funktioniert? Sie setzen das Trennzeichen auf // erinnern? Setzen Sie es zurück auf ;

6. Setzen Sie das Trennzeichen zurück und sehen Sie sich die Prozedur an:

mysql> delimiter ;
mysql> show procedure status;
+-----------+--------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
| Db        | Name   | Type      | Definer        | Modified            | Created             | Security_type | Comment | character_set_client | collation_connection | Database Collation |
+-----------+--------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
| yourdb    | foobar | PROCEDURE | [email protected] | 2013-12-06 14:27:23 | 2013-12-06 14:27:23 | DEFINER       |         | utf8                 | utf8_general_ci      | latin1_swedish_ci  |
+-----------+--------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
1 row in set (0.00 sec)

7. Führen Sie es aus:

mysql> call foobar();
+-------+
| hello |
+-------+
| hello |
+-------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)

Hallo Welt komplett, lass es mit etwas besserem überschreiben.

8. Lassen Sie foobar fallen, definieren Sie es erneut, um einen Parameter zu akzeptieren, und führen Sie ihn erneut aus.

mysql> drop procedure foobar;
Query OK, 0 rows affected (0.00 sec)

mysql> show procedure status;
Empty set (0.00 sec)

mysql> delimiter //
mysql> create procedure foobar (in var1 int)
    -> begin select var1 + 2 as result;
    -> end//
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;
mysql> call foobar(5);
+--------+
| result |
+--------+
|      7 |
+--------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)

Nett! Wir haben eine Prozedur erstellt, die Eingaben entgegennimmt, ändert und ausgibt. Lassen Sie uns nun eine Out-Variable ausführen.

9. Entfernen Sie foobar, machen Sie eine Variable heraus, führen Sie sie aus:

mysql> delimiter ;
mysql> drop procedure foobar;
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter //
mysql> create procedure foobar(out var1 varchar(100))
    -> begin set var1="kowalski, what's the status of the nuclear reactor?";
    -> end//
Query OK, 0 rows affected (0.00 sec)


mysql> delimiter ;
mysql> call foobar(@kowalski_status);
Query OK, 0 rows affected (0.00 sec)

mysql> select @kowalski_status;
+-----------------------------------------------------+
| @kowalski_status                                    |
+-----------------------------------------------------+
| kowalski, what's the status of the nuclear reactor? |
+-----------------------------------------------------+
1 row in set (0.00 sec)

10. Beispiel für die Verwendung von INOUT in MySQL:

mysql> select 'ricksays' into @msg;
Query OK, 1 row affected (0.00 sec)


mysql> delimiter //
mysql> create procedure foobar (inout msg varchar(100))
-> begin
-> set msg = concat(@msg, " never gonna let you down");
-> end//


mysql> delimiter ;


mysql> call foobar(@msg);
Query OK, 0 rows affected (0.00 sec)


mysql> select @msg;
+-----------------------------------+
| @msg                              |
+-----------------------------------+
| ricksays never gonna let you down |
+-----------------------------------+
1 row in set (0.00 sec)

Ok, es hat funktioniert, es hat die Saiten zusammengefügt. Sie haben also eine Variable msg definiert, diese Variable in eine gespeicherte Prozedur namens foobar übergeben, und @msg wurde von foobar geschrieben. 

Jetzt wissen Sie, wie Sie gespeicherte Prozeduren mit Trennzeichen erstellen. Setzen Sie dieses Lernprogramm hier fort und beginnen Sie mit Variablen in gespeicherten Prozeduren: http://net.tutsplus.com/tutorials/an-introduction-to-stored-procedures/

65
Eric Leschinski

Hier ist mein Code zum Erstellen von Prozeduren in MySQL:

DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `procedureName`(IN comId int)
BEGIN
select * from tableName 
         (add joins OR sub query as per your requirement)
         Where (where condition here)
END $$
DELIMITER ;

Um diese Prozedur aufzurufen, verwenden Sie diese Abfrage:

call procedureName(); // without parameter
call procedureName(id,pid); // with parameter

Detail :

1) DEFINER: root ist der Benutzername und ändert ihn entsprechend Ihrem Benutzernamen von mysql. Localhost ist der Host, den Sie mit der IP-Adresse des Servers ändern können, wenn Sie diese Abfrage auf dem Hosting-Server ausführen.

Lies hier für mehr Details

2
Sunny S.M

MEINE ERSTELLUNG VON SQL-SPEICHERVERFAHREN

DELIMiTER $$
create procedure GetUserRolesEnabled(in UserId int)
Begin

select * from users
where id=UserId ;
END $$
DELIMITER ;
0
Hari Lakkakula

Ich habe eine einfache MySQL-Prozedur wie folgt erstellt:

DELIMITER //
CREATE PROCEDURE GetAllListings()
 BEGIN
 SELECT nid, type, title  FROM node where type = 'lms_listing' order by nid desc;
END //
DELIMITER;

Bitte folgen Sie diesem. Nachdem die Prozedur erstellt wurde, können Sie dasselbe sehen und ausführen. 

0
Md Jamiruddin