41

シンプルな MySQL 関数を作成したいのですが、次の MySQL プロシージャがあります。

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

CALL getUser(2);

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

4

3 に答える 3

43

これは 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;//
于 2013-01-30T15:25:20.527 に答える
18

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

于 2014-03-26T18:45:59.053 に答える
-5

CREATE FUNCTION F_TEST(PID INT) RETURNS VARCHAR この部分 をCREATE FUNCTION F_TEST(PID INT) RETURNS TEXT

次の行も変更します。

DECLARE NAME_FOUND TEXT DEFAULT "";

それはうまくいくはずです。

于 2014-03-10T10:56:56.157 に答える