• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PL/SQL文についてです。)

PL/SQL文においてオブジェクト型の変数を使用する方法と注意点

このQ&Aのポイント
  • PL/SQL文において、CREATE TYPEでオブジェクト型の変数を定義することができます。
  • オブジェクト型の変数を使用する際には、適切な格納方法や初期化、配列への格納方法に注意が必要です。
  • オブジェクト型の変数をカーソルから取得して格納する場合、正しく表示されないことがあるため注意が必要です。

質問者が選んだベストアンサー

  • ベストアンサー
  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.4

>となるとそこのnvl関数はどこに書いたらいいのか・・・ カーソルに割り当てられているSELECT文でもいいですし、 obj.income_person := obj.income_person + NVL(○○,0) でもいいです。

haveagolde
質問者

お礼

なるほどどちらでもいいんですね!とても勉強になりました。今度実行してみます!ありがとうございました。

その他の回答 (3)

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.3

もしその方法で表示されないのであれば、足しこんでいるフィールドにNULLが含まれているということではないですか?NVLはかけていますか? なお、CREATE OR REPLACE TYPE HAIRETSU IS VARRAY(10) OF temp_number;でも格納できるはずです。

haveagolde
質問者

お礼

obj.income_person := obj.income_person + ○○ ○○にnullの場合も入り込んでます!!というこはそこを0に置き換えればいいんですね!?となるとそこのnvl関数はどこに書いたらいいのか・・・

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.2

内容が理解できました。 1.格納されます。もしかしてSET SERVEROUT ONしていないだけでは。。? 2.ここでいうHAIRETSUは、 CREATE OR REPLACE TYPE HAIRETSU IS TABLE OF temp_number; ですよね? answer(i) := obj;でanswerに格納できます。 3.可能です。

haveagolde
質問者

お礼

>>もしかしてSET SERVEROUT ONしていないだけでは。。? 私が行っていたのは1に書いた内容とは違って、カーソルからフェッチしたきたデータを使ってオブジェクト型の変数income_personにたしていきました。 obj.income_person := obj.income_person + ○○ これでフェッチするデータがなくなったときにループを抜けて、 dbms_output.put_line(obj.income_person)と出力させようと思ってやりましたが、表示されませんでした。(ただの文字列をその行の前後に出力させたものは出力されていました。)この足しかたがまずかったと思ったんではじめからオブジェクト変数にたしていくのではなくtemp_income_person合計値をもとめておいて、ループを抜けてからオブジェクト変数にいれればうまくいくのではないかと思い書いてみました。今実行環境がないんで試せませんが・・最初のやり方でもいけるなら表示されなかった原因はつかまめせんが・・・ HAIRETSUはVARRAY型でcreate typeしています。それでもanswer(i) := obj;でanswerに格納できますか?

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.1

Package Bodyに引数がついているし、内容もかなり混乱しているようです。おそらくobjの型が非常に都合よく理解されている気がします。 まずobjに割り当てられているオブジェクト型のCREATE TYPE文と、temp_answerの定義を示してもらえませんか。

haveagolde
質問者

お礼

create or replace type temp_answer is object( income_person NUMBER, ○○     NUMBER, ○○     NUMBER, ・・・・・・・・・・)です。 あと >>Package Bodyに引数がついているし、内容もかなり混乱しているようです。 すいません誤植です。 CREATE OR REPLAECE PACKAGE BODY PCG IS PROCEDURE プロシージャ1(○○ IN NUMBER、answer OUT NOCPY HAIRETSU) IS・・・・・です。

関連するQ&A