簡単なMySQL関数を作成したいのですが、次のMySQL手順があります。
CREATE PROCEDURE getUser(gU INT)
SELECT * FROM Company
WHERE id_number = gU;
CALL getUser(2);
これをMySQL関数にするための手助けが必要です。プロシージャで関数を使用することの長所と短所は何ですか?
これは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;//
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)
を実行します。