sql >> Database >  >> RDS >> Mysql

Opgeslagen MySQL-functies en -procedures maken en uitvoeren?

Dit artikel beschrijft hoe u MySQL-opgeslagen functies en procedures op uw A2 Hosting-account kunt maken en uitvoeren. U kunt opgeslagen functies en procedures gebruiken voor een breed scala aan scenario's. Goed ontworpen opgeslagen functies en procedures kunnen bijvoorbeeld de databasebeveiliging verbeteren, de gegevensintegriteit verbeteren en de prestaties verbeteren.

Opgeslagen functies

Opgeslagen MySQL-functies bieden een krachtige en flexibele manier om gegevens te manipuleren en te verwerken. U kunt opgeslagen functies definiëren en uitvoeren op elke A2 Hosting-server die MySQL gebruikt.

Een testdatabase opzetten

Om een ​​eenvoudig voorbeeld van opgeslagen functies te demonstreren, beginnen we met het maken van een database die we voor testdoeleinden kunnen gebruiken. Vervang in de volgende SQL-instructie gebruikersnaam met de gebruikersnaam van uw account:

CREATE DATABASE username_test;
U kunt de vorige SQL-opdracht (en de volgende SQL-opdrachten) uitvoeren vanaf de opdrachtregel met behulp van de MySQL-tool, of in uw webbrowser met phpMyAdmin.

Als u phpMyAdmin gebruikt, klikt u op de naam gebruikersnaam _test om de database te selecteren. Als u het opdrachtregelprogramma mysql gebruikt, typt u anders de volgende SQL-instructie:

USE username_test;

Maak vervolgens een tabel in de gebruikersnaam _test database met de naam producten . Voer hiervoor de volgende SQL-instructie uit:

CREATE TABLE products (prod_id INT NOT NULL AUTO_INCREMENT, prod_name VARCHAR(20) NOT NULL, prod_cost FLOAT NOT NULL DEFAULT 0.0, prod_price FLOAT NOT NULL DEFAULT 0.0, PRIMARY KEY(prod_id));

De volgende SQL-instructie voegt enkele voorbeeldgegevens toe aan de producten tafel:

INSERT INTO products (prod_name, prod_cost, prod_price) VALUES ('Basic Widget',5.95,8.35),('Micro Widget',0.95,1.35),('Mega Widget',99.95,140.00);
De opgeslagen functie maken

Nu we een database en een tabel hebben om mee te werken, zijn we klaar om een ​​opgeslagen functie te maken. Laten we een functie maken met de naam calcProfit . Deze functie heeft twee invoerparameters:de kosten en de prijs van iets. Het berekent de winst door de kosten van de prijs af te trekken en retourneert vervolgens de waarde naar de aanroepende uitdrukking.

Voer de volgende MySQL-instructies uit om deze opgeslagen functie te maken:

DELIMITER $$
CREATE FUNCTION calcProfit(cost FLOAT, price FLOAT) RETURNS DECIMAL(9,2)
BEGIN
  DECLARE profit DECIMAL(9,2);
  SET profit = price-cost;
  RETURN profit;
END$$
DELIMITER ;
De DELIMITER commando aan het begin van deze instructies voorkomt dat MySQL de functiedefinitie te snel verwerkt. De DELIMITER opdracht aan het einde van deze instructies herstelt de verwerking naar normaal.
De opgeslagen functie gebruiken

U kunt nu de opgeslagen functie in een databasequery uitvoeren. De volgende SQL-instructie laat zien hoe u dit doet:

SELECT *, calcProfit(prod_cost,prod_price) AS profit FROM products;

Deze SQL-instructie geeft de volgende resultaten:

+---------+--------------+-----------+------------+--------+
| prod_id | prod_name    | prod_cost | prod_price | profit |
+---------+--------------+-----------+------------+--------+
|       1 | Basic Widget |      5.95 |       8.35 |   2.40 |
|       2 | Micro Widget |      0.95 |       1.35 |   0.40 |
|       3 | Mega Widget  |     99.95 |        140 |  40.05 |
+---------+--------------+-----------+------------+--------+

Zoals u kunt zien, is de calcProfit functie berekent automatisch de winst (prijs minus de kosten) voor elk product in de tabel.

Opgeslagen procedures

Opgeslagen procedures worden soms verward met opgeslagen functies, maar ze verschillen op een aantal belangrijke manieren. Opgeslagen procedures moeten bijvoorbeeld worden aangeroepen met de CALL statement, terwijl opgeslagen functies direct in SQL-expressies kunnen worden gebruikt. U kunt opgeslagen procedures definiëren en uitvoeren op elke A2 Hosting-server die MySQL gebruikt.

De volgende MySQL-instructies laten zien hoe u een zeer eenvoudige opgeslagen procedure kunt maken met de naam procedureTest . Deze procedure voert een eenvoudige opzoeking uit op de producten tabel die we in het bovenstaande voorbeeld van een opgeslagen functie hebben gebruikt. Hoewel deze procedure niet veel praktisch nut heeft, demonstreert het de juiste syntaxis en structuur voor het declareren van een opgeslagen procedure:

DELIMITER $$
CREATE PROCEDURE procedureTest()
BEGIN
  SELECT prod_name FROM products;
END$$
DELIMITER ;

Gebruik het volgende MySQL-statement om de opgeslagen procedure uit te voeren:

CALL procedureTest() \G
Als u phpMyAdmin gebruikt, typt u de vorige MySQL-instructie zonder de \G optie aan het einde.

Meer informatie

Ga voor meer informatie over opgeslagen procedures en functies in MySQL naar http://dev.mysql.com/doc/refman/5.0/en/create-procedure.html.


  1. Hoe krijg ik een waarde uit de laatst ingevoegde rij?

  2. SQL Dev 4.2 Top SQL

  3. SELECT-lijst staat niet in GROUP BY-clausule en bevat niet-geaggregeerde kolom .... incompatibel met sql_mode=only_full_group_by

  4. Het compatibiliteitsniveau van een database in SQL Server controleren met T-SQL