0

J で始まる従業員名をテーブルから抽出する関数を作成しようとしています。

delimiter $$
create function myfunction(nume_persoane varchar (30)) returns int deterministic
begin
declare omcucap int;
select first_name into omcucap  from employee where id = nume_persoane and first_name = 'J%';
return omcucap;
end $$

関数を呼び出すと、select myfunction(first_name) from employee;が返されますnull。何故ですか?説明は何ですか..

4

3 に答える 3

1
omcucap int;

あなたfirst_nameはint型ですか?私はそうは思わない。

そして、次の変更を検討してください

UPPER(first_name) LIKE 'J%';

「%」に = を使用することはできません

于 2013-03-25T09:41:27.897 に答える
0

パラメータ「nume_persoane」は従業員のIDに設定されています

id = nume_persoane および first_name = 'J%' の従業員から omcucap に first_name を選択します。

ただし、関数を first_name で呼び出します

myfunction(first_name) を選択

また、first_name は int ではありませんか? しかし、宣言された変数に first_name を挿入しようとします

omcucap int を宣言します。
first_name を omcucap に選択します ...

アップデート

これらの機能を使用します:

delimiter $$
create function myfunction(p1 int) returns int
begin
declare eID int;
select id into eID  from employee where id = p1 and first_name LIKE 'J%';
return eID;
end $$

これらのselectステートメントで関数を実行しました:

SELECT myfunction(id) FROM employee;
于 2013-03-25T09:46:15.607 に答える
0

shazin の回答を完成させて機能させるには、omcucap を varchar として宣言する必要があります。

declare omcucap varchar(first_name size);

そして、idはvarcharではないと思います。したがって、代わりに nume_persoane になりint(id size)ます。そして、戻り値の型は次のようになりますvarchar(first_name size)

あなたの機能は

delimiter $$
create function myfunction(nume_persoane int(10)) returns varchar(50) deterministic
begin
declare omcucap varchar(50);
select first_name into omcucap  from employee where id = nume_persoane and first_name LIKE 'J%' LIMIT 1;
return omcucap;
end $$

50 はあなたfirst_nameのサイズで、10あなたの ID サイズです。いくつかの結果の問題を回避するためにステートメント
を追加します。LIMIT 1

編集
デフォルト値が必要ない場合は、次を使用します:

select IFNULL(first_name, 'default_value') into omcucap[...]
于 2013-03-25T09:44:44.763 に答える