2011-11-07 11 views
0

Oracleタイプは次のように宣言されています。Oracle CREATE TYPEおよびPL/SQL

作成または置換タイプits_accountarray;

基本タイプはありません。この型は、プロシージャとパッケージ(およびJavaのストアドプロシージャの配列記述子)で使用されます。プロシージャ/パッケージでは、を配列に追加する関数を使用します。

<declare section> 
    v_account latax.ITS_ACCOUNTARRAY := new ITS_accountArray(); 
... 
BEGIN 
    ... 
    ... 
    v_account.extend(1); 

とJavaで、それは次のように使われています: たoracle.sql.ARRAY ls_accountARRAY、ls_periodARRAY。

oracle.sql.ArrayDescriptor ad = ArrayDescriptor.createDescriptor(**"ITS_ACCOUNTARRAY"**, oconn); 

ls_accountARRAY = new ARRAY(ad, oconn, arg_accounts); 
ocs.setARRAY(2, ls_accountARRAY); 

これはどのように機能するのですか?名前には配列が含まれていますが、通常はわかるように、配列やテーブルの型として定義されていません。それは動作しますが、これは法的な用法ですか、あるいは、型を明示的に配列型に宣言すべきですか?

おかげ

サム

+0

**更新:**私は、この問題を抱えている人のためにこれを修正したいだけです。これは私が使用していたSqltoolsバージョンの表示上の問題であることが判明しました。タイプを編集したとき、ソースを部分的に表示していました。 'CREATE OR REPLACE TYPE its_accountarray' それが私のものです。本文部分 "** AS TABLE OF ... **"は表示されませんでした。明らかにそれは間に多くのスペースを置いて、そのボディは見えていなかった。以下に述べるように、SQL * Plusは正しく表示されました。ツールの新しいバージョンはまだ多くのスペースが埋め込まれているが、少なくともビュー内には優れています。 – SamV

答えて

2

私は何が起こっているかあなたが言う再現してみました、そしてエラーました:だから

CREATE OR REPLACE TYPE its_accountarray; 

DECLARE 
    v its_accountarray := its_accountarray(); 
BEGIN 
    null; 
END; 
/

PLS-00311: the declaration of "ITS_ACCOUNTARRAY" is incomplete or malformed 

は、おそらく間違った型定義(例を見ていますあなたが間違ったスキーマでそれを見ている)、または型定義全体を見ていない(例えば、実装を提供するTYPE BODYがあります)。これはネストしたテーブルタイプのように動作しているように見えるので、前者のほうが可能性が高いです。

+0

こんにちはデイブ、すぐに応答してくれてありがとう。 – SamV

+0

こんにちはデイブ、 私はENTERをあまりにも早く最後に​​押したと思います。 あなたは正しいです!その宣言は間違っていた。私が使用していたツール(SqlTools 1.5)のバグかどうか疑問に思っています。 SQLToolsで型を開いたときに、その部分だけが表示され、本体がありませんでした。だから私はとても混乱していた。 私は期待どおりには示しています。sqlplusでITS_ACCOUNTARRAYを説明してみました: 'SQL>私は数年前からSQLToolsを使用してきたし、これが初めてであるVARCHAR2のITS_ACCOUNTARRAY ITS_ACCOUNTARRAY表(24)' を記述、それは本当に私を得た。 もう一度ありがとうございます。 サム – SamV

関連する問題