• 締切済み

OracleのSQLについて

OracleのSQLについて質問があります。 VARCHAR2をReturnするFunction「GETKANANAME(引数はID)」があるとします。 このとき Update NAMELIST SET kananame = (select GETKANANAME('00001') from dual); とすると、kananameに何も設定されません。 (エラーメッセージなどは何も出ていません。) select GETKANANAME('00001') from dual; だと期待する値が帰ってくるのですが…。 何か間違ったSQL文なのでしょうか?

みんなの回答

  • Struggler
  • ベストアンサー率18% (97/527)
回答No.2

もう解決済みかもしれませんが、Packageか何か function の上位のクラス(?)の名前をつけたらどうでしょうか。 パッケージ.GETKANANAME('00001')

  • utakataXEX
  • ベストアンサー率69% (711/1018)
回答No.1

SQL*Plusなどから UPDATE 文を実行した後、他のツールで結果を確認したりしていないでしょうか? COMMITしないと他のツールでは(または別セッションのSQL*Plusでも)、変更内容を確認する事はできません。COMMITしてください。 上記を行なった上でのご質問であれば、ごめんなさいです。 以下は回答とは直接関係ないですが、書き方は SET kananame = GETKANANAME('00001') の方が性能としては良好だと思います。 (dual表を使うのはFunctionの実行結果を確認する時だけでよい) もう1点、質問上、省略しただけかもしれませんが、引数は'00001'固定だとNAMELISTのkananameはすべて同じになりますが、これは大丈夫ですか? 引数はNAMELISTのIDなり他の変数なり、とかではないでしょうか?

folnia
質問者

お礼

返答ありがとうございます >commitについて commitは実行しています。 質問上省略しました、申し訳ありません。 >性能に関して アドバイスありがとうございます。 性能のことも考えないといけないのですが、 まずは反映されないことにはどうにも。。。; >引数固定 実際のSQLでは引数はnamelistのIDになり、WHERE句などがつきます。

関連するQ&A