dポイントプレゼントキャンペーン実施中!

OracleのSQLについて質問があります。

VARCHAR2をReturnするFunction「GETKANANAME(引数はID)」があるとします。
このとき

Update NAMELIST
SET kananame = (select GETKANANAME('00001') from dual);

とすると、kananameに何も設定されません。
(エラーメッセージなどは何も出ていません。)
select GETKANANAME('00001') from dual;
だと期待する値が帰ってくるのですが…。

何か間違ったSQL文なのでしょうか?

A 回答 (2件)

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



パッケージ.GETKANANAME('00001')
    • good
    • 0

SQL*Plusなどから UPDATE 文を実行した後、他のツールで結果を確認したりしていないでしょうか?



COMMITしないと他のツールでは(または別セッションのSQL*Plusでも)、変更内容を確認する事はできません。COMMITしてください。

上記を行なった上でのご質問であれば、ごめんなさいです。

以下は回答とは直接関係ないですが、書き方は

SET kananame = GETKANANAME('00001')

の方が性能としては良好だと思います。
(dual表を使うのはFunctionの実行結果を確認する時だけでよい)

もう1点、質問上、省略しただけかもしれませんが、引数は'00001'固定だとNAMELISTのkananameはすべて同じになりますが、これは大丈夫ですか?
引数はNAMELISTのIDなり他の変数なり、とかではないでしょうか?
    • good
    • 0
この回答へのお礼

返答ありがとうございます

>commitについて
commitは実行しています。
質問上省略しました、申し訳ありません。

>性能に関して
アドバイスありがとうございます。
性能のことも考えないといけないのですが、
まずは反映されないことにはどうにも。。。;

>引数固定
実際のSQLでは引数はnamelistのIDになり、WHERE句などがつきます。

お礼日時:2010/11/14 10:56

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!