シンプルな MySQL 関数を作成したいのですが、次の MySQL プロシージャがあります。
CREATE PROCEDURE getUser(gU INT)
SELECT * FROM Company
WHERE id_number = gU;
CALL getUser(2);
これをMySQL関数にするのに助けが必要です。プロシージャで関数を使用することの長所と短所は何ですか?
シンプルな 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 という関数を作成しました。パラメータは無視されCHAR(50)
、値「foobar」を含む が返されます。yar というテーブルを作成し、3 つの行を追加しました。select ステートメントは、hello(5)
yar によって返された各行に対して関数を実行します。
CREATE FUNCTION F_TEST(PID INT) RETURNS VARCHAR
この部分
をCREATE FUNCTION F_TEST(PID INT) RETURNS TEXT
次の行も変更します。
DECLARE NAME_FOUND TEXT DEFAULT "";
それはうまくいくはずです。