postgresqlで同名の関数を定義した場合について質問があります。


posqtgresqlで名前は同じで引数の異なる関数を定義した場合、
その関数を利用する場合の判定は引数によって行われるのでしょうか?
例)
・定義されている関数
(a) func(integer) begin ... end;
(b) func(integer, integer) begin ... end;

・呼び出すSQL
select func(1);
→この場合(a)の関数がコールされる?

select funct(1,2);
→この場合(b)の関数がコールされる?

回答の条件
  • 1人50回まで
  • 登録:
  • 終了:2013/04/09 19:42:44

ベストアンサー

id:a-kuma3 No.1

回答回数4973ベストアンサー獲得回数2154

できると思います。
そういうのを「関数のオーバーロード」って言います。
マニュアルに記載があります。
http://www.postgresql.jp/document/9.2/html/xfunc-overload.html
http://www.postgresql.jp/document/9.2/html/sql-createfunction.html#SQL-CREATEFUNCTION-OVERLOADING

マニュアルにも書いてありますけど、関数の実体を C言語で実装するときには、SQL 上ではオーバーロードが効きますけど、C言語ではオーバーロードが効かないので、C言語の関数としては関数名を変えてあげる必要がありそうです。
関数の実体を PL/SQL でやるなら、気にしなくて大丈夫だと思います。

id:k-motoyan888

ありがとう御座います。
関数のオーバーロードによって定義することが可能なのですね。
マニュアルのリンクもありがとうございました。

2013/04/09 19:43:55

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません