- 締切済み
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文なのでしょうか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- Struggler
- ベストアンサー率18% (97/527)
もう解決済みかもしれませんが、Packageか何か function の上位のクラス(?)の名前をつけたらどうでしょうか。 パッケージ.GETKANANAME('00001')
- utakataXEX
- ベストアンサー率69% (711/1018)
SQL*Plusなどから UPDATE 文を実行した後、他のツールで結果を確認したりしていないでしょうか? COMMITしないと他のツールでは(または別セッションのSQL*Plusでも)、変更内容を確認する事はできません。COMMITしてください。 上記を行なった上でのご質問であれば、ごめんなさいです。 以下は回答とは直接関係ないですが、書き方は SET kananame = GETKANANAME('00001') の方が性能としては良好だと思います。 (dual表を使うのはFunctionの実行結果を確認する時だけでよい) もう1点、質問上、省略しただけかもしれませんが、引数は'00001'固定だとNAMELISTのkananameはすべて同じになりますが、これは大丈夫ですか? 引数はNAMELISTのIDなり他の変数なり、とかではないでしょうか?
お礼
返答ありがとうございます >commitについて commitは実行しています。 質問上省略しました、申し訳ありません。 >性能に関して アドバイスありがとうございます。 性能のことも考えないといけないのですが、 まずは反映されないことにはどうにも。。。; >引数固定 実際のSQLでは引数はnamelistのIDになり、WHERE句などがつきます。