« Home | Undocumented secrets for super-sizing your PGA » | Oracle SQL Injection Attacks » | How to unwrap Oracle PL/SQL » | Using an Oracle database link to connect to Excel » | ORASentry » | What is your experience with cursor_sharing? » | Building an Ajax Memory Tree » | Approach 4: Using Regular Expressions » | Oracle Database 10g: Top Features for DBAs Release... » | Project Lockdown 2 »

Thanks for the question regarding "anydata type"

今日は第4号で少しご紹介したAskTom.comから、ANYDATA型についての
記事を取り上げたいと思います。
解説では分析関数についても少しお話させて頂いています。
SQLやPL/SQLに詳しい方には少し物足りない内容かもしれません。

<第4号のバックナンバーはこちら>
http://blogs.yahoo.co.jp/yakusa_oracle/archive/2006/7/9

ANYDATA型とは言葉通り全ての型を格納できるデータタイプになります。
格納する時も参照する時も一工夫が必要になります。
詳しくは引用先のページを確認すると分かるのですが、
格納時(Insert時)はconvert関数(sys.anydata.convert型名)を使用し、
参照時(Select時)はget関数(sys.anydata.get型名)を使用します。
既にお気づきになった方もいるかもしれませんが、
型名が分からないと何もできません。

格納されている型名を知る為にはgettypeName関数を使用します。
引用先ページでも紹介されていますが、gettypeName関数で取得した
型によってget関数を使い分けるFunctionをオリジナルで作成しておくと
select文で簡単に値を取得できるようになります。

詳細は以下URLのマニュアルで確認できます。
http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_v1/appdev.102/B19248-01/adfns_sqltypes.html#793390


■ AskTom.com
http://asktom.oracle.com/pls/ask/f?p=4950:1:1044595:RESET::1
■ 引用ページ
http://asktom.oracle.com/pls/ask/f?p=4950:8:1044595::NO::F4950_P8_DISPLAYID,F4950_P8_CRITERIA:3099475696866,{ANYDATA}


_________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
記事本文
_________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
◆ Thanks for the question regarding "anydata type"

Here is an example. It could be potentially useful
in an application that stores generic attributes
-- attributes you don't KNOW what the datatypes are
until you actually run the code. In the past, we
would have stuffed everything into a VARCHAR2 --
dates, numbers, everything. Now, you can put a
date in and have it stay as a date (and the system
will enforce it is in fact a valid date and let you
perform date operations on it -- if it were in a
varchar2 -- someone could put "hello world" into
your "date" field)

_________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
英語の語順に近い解釈

※自然な語順で解釈する癖をつけるために
敢えて不自然な日本語になっています。
※また今回は関係代名詞が多いので
どの語を修飾する文なのか文末に()で表記しています。
_________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
◆ Thanks for the question regarding "anydata type"
anydata typeに関するご質問ありがとうございます。

Here is an example.
例があります。

It could be potentially useful in an application
それはアプリケーションにとって役立つ可能性があるかもしれません。

that stores generic attributes
汎用的な属性を格納する(アプリケーション)

-- attributes you don't KNOW what the datatypes are
-- その属性、あなたが分からない(属性)、どんなデータ型なのか(わからない)

until you actually run the code.
あなたが実際にそのcodeを実行するまで。

In the past,
今までは

we would have stuffed everything into a VARCHAR2
私たちは全てをVARCHAR2型に詰め込んでいました。

-- dates, numbers, everything.
日付、数字、その他全てを

Now,
そして今、

you can put a date in and have it stay as a date
あなたは日付を日付のままとして格納することができます。

(and the system will enforce
(そしてそのシステムは強制することができます。

it is in fact a valid date
それが実際に有効な日付であることを(強制できます)

and let you perform date operations on it
そしてあなたに日付型としての操作を実行させることができます。

-- if it were in a varchar2 --
-- もしそれがVARCHAR2なら --

someone could put "hello world" into your "date" field)
誰かが"hello world"を格納することができるかもしれません。

_________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
英語解説
_________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
regarding

※・・・に関して


It could be

※could,wouldなどは可能性が遠かったり、遠まわしに(丁寧に)
伝えたい場合などに使います。
can,willの過去形とはまったく関係ありませんが、
現実から遠いというイメージでは少し似ています。


It could be potentially useful in an application
that stores generic attributes

※ここのthatはapplicationを修飾するthatです。


stores

※貯蔵、記憶などの意味で使用します。
今回の場合、データの格納というニュアンスですね。
今回の文章ではデータの格納という意味で
storeの他にput,stuffと色々言い換えています。
英語には同じ単語が頻発するとくどい感じになるので、
敢えて言い換えることが良くあります。


generic

※汎用的な


-- attributes you don't KNOW what the datatypes are
until you actually run the code.

※attributesとyouの間のthatが省略されています。
attributesと最初に言い放ってから、次々に説明を付け加えています。
whatからareまではknowの修飾です。
until以降もknowに対する時制の修飾です。


VARCHAR2

※VARCHAR2データ型は可変長のキャラクター型です。
名前や住所など長さが特定できないデータなどを格納する際に
良く利用します。


and let you perform date operations on it

※date型のままでデータベースに格納されていれば、
日付の計算や日付書式やタイムゾーンの変換など
便利なOracleの機能を使用できます。


"hello world"

※単純なサンプルプログラムにおいて、
この"hello world"を表示するだけのプログラムを
非常に良く使用します。深い意味はなく、単なる伝統(?)です。
今も世界のどこかでプログラム入門者達によって
Hello, world!プログラムが動いているのでは
ないでしょうか。


_________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
Oracle解説
_________________________
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ANYDATA型とはまったく関係ありませんが、
この引用先のスレッドの中でインドのSivaさんが、
分析関数を使用しているのでこちらも少し紹介したいと思います。

分析関数はRANK関数を使用する場合など必ず使用する必要があります。

◆ 例えば以下のような内容のテーブルがあったとします。

SQL> select * from aaa1;
COL1 COL2
---------- ----
1 aaa
2 aaa
2 aaa
3 bbb
3 bbb
3 bbb

◆ RANK関数を使用すると簡単に順位を表示することができます。
順位の対象となる列はorder by で指定します。

SQL> select col1,rank() over (order by col1) as rank from aaa1;
COL1 RANK
---------- ----------
1 1
2 2
2 2
3 4
3 4
3 4

◆ partition by で順位の計算範囲を区分けすることができます。
この例ではcol2のaaa,bbb別に順位を計算させています。

SQL> select col2,col1,rank() over (partition by col2 order by col1) as rank from aaa1;

COL2 COL1 RANK
---- ---------- ----------
aaa 1 1
aaa 2 2
aaa 2 2
bbb 3 1
bbb 3 1
bbb 3 1

詳細は以下URLのマニュアルで確認できます。

<Japanese>
http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/server.102/B19201-02/functions.html#25267
<English>
http://download-west.oracle.com/docs/cd/B19306_01/server.102/b14200/functions001.htm#i81407

About me

  • I'm yaksa
  • From Tokyo, Japan
My profile
にほんブログ村 IT技術ブログへ

blogRanking