web-dev-qa-db-ja.com

MySQL、単純な関数を作成する

簡単なMySQL関数を作成したいのですが、次のMySQL手順があります。

CREATE PROCEDURE getUser(gU INT)
   SELECT * FROM Company
   WHERE id_number = gU;

CALL getUser(2);

これをMySQL関数にするための手助けが必要です。プロシージャで関数を使用することの長所と短所は何ですか?

33
Dembele

これはmysql関数の例です。役に立てば幸いです。 (まだテストしていませんが、動作するはずです)

DROP FUNCTION IF EXISTS F_TEST //
CREATE FUNCTION F_TEST(PID INT) RETURNS VARCHAR
BEGIN
/*DECLARE VALUES YOU MAY NEED, EXAMPLE:
  DECLARE NOM_VAR1 DATATYPE [DEFAULT] VALUE;
  */
  DECLARE NAME_FOUND VARCHAR DEFAULT "";

    SELECT EMPLOYEE_NAME INTO NAME_FOUND FROM TABLE_NAME WHERE ID = PID;
  RETURN NAME_FOUND;
END;//
35

MySQL関数の例:

mysqlターミナルを開きます:

el@apollo:~$ mysql -u root -pthepassword yourdb
mysql>

関数が既に存在する場合は削除します

mysql> drop function if exists myfunc;
Query OK, 0 rows affected, 1 warning (0.00 sec)

関数を作成する

mysql> create function hello(id INT)
    -> returns CHAR(50)
    -> return 'foobar';
Query OK, 0 rows affected (0.01 sec)

テストするためのシンプルなテーブルを作成します

mysql> create table yar (id INT);
Query OK, 0 rows affected (0.07 sec)

テーブルyarに3つの値を挿入

mysql> insert into yar values(5), (7), (9);
Query OK, 3 rows affected (0.04 sec)
Records: 3  Duplicates: 0  Warnings: 0

yarからすべての値を選択し、毎回関数helloを実行します:

mysql> select id, hello(5) from yar;
+------+----------+
| id   | hello(5) |
+------+----------+
|    5 | foobar   |
|    7 | foobar   |
|    9 | foobar   |
+------+----------+
3 rows in set (0.01 sec)

起こったことを言語化して内部化する:

1つのパラメーターを取るhelloという関数を作成しました。パラメーターは無視され、値「foobar」を含むCHAR(50)を返します。 yarというテーブルを作成し、3つの行を追加しました。 selectステートメントは、yarによって返された各行に対して関数hello(5)を実行します。

12
Eric Leschinski