• ベストアンサー

BINARY INTEGERとINTEGERの違いについて

はじめまして。 初心な質問でもうしわけございませんが よろしくお願いします。 業務で、PL/SQLのソースを読んでいたら 「配列の添え字をINTEGER -> BINARY INTEGER に変更する」という コメントがありました。 どうして、そのような変更したのかがわからないし、 作成者がいないので聞く事ができないのですが、 私のほうもBINARY INTEGER とINTEGERの違いが よくわからないので、こちらでお聞きできればと 思ってます。 よろしくお願いします。

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

  • ベストアンサー
  • noah7150
  • ベストアンサー率46% (116/251)
回答No.1

最近Oracleを使う事も減り、質問を読んでてふと私も気になり調べてみました。 調べるとOracleで数値は基本的に全てNumber型で扱われているようで 内部は全て10進型で保管されているようです。 値の範囲は論理的に制限がかけられているのかと 流石に発送が…と思った瞬間でした http://itpro.nikkeibp.co.jp/article/COLUMN/20060113/227234/ の表 http://itpro.nikkeibp.co.jp/article/COLUMN/20060113/227234/?SS=imgview&FD=-192991770&ST=develop となるとBinaryIntegerはパソコンで使う通常の整数型なのでしょうかねぇ…。

maho_momo
質問者

お礼

noah7150様。 お返事が遅くなり、大変申し訳ございませんでした。 参考先のURL、ありがとうございました! 勉強になりました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.2

常識的に考えると、型の変換は、その先にデータ型に依存する”何か”があるから・・ 何だと思いますが、外部プロシジャなどの外部とのデータ交換等があれば、 型を変換する必要が生まれます。 オラクルだけしか利用しないなら、数値はnumber型で十分ですので。

maho_momo
質問者

お礼

k_o_r_o_c_h_a_n様。 お返事が遅くなり大変もうしわけございませんでした。 そうですね。 「何か」のために型を変換するのですよね。 その観点でもう一度考えます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • PL/SQLのFUNCTIONにおける引数について

    PL/SQLで、FUNCTIONを作成しています。 そのFUNCTIONの引数に StringList型の配列を受け取りたいのですが、 どのように書いたらよろしいのでしょうか? 申し訳ありませんが、教えて下さい。

  • PL/SQLでの配列についてetc

    PL/SQLについて、何点か質問があります。 どれかひとつでも構わないので、皆さんのお知恵をお貸しください。 (1)ある配列変数に格納されている要素を全てDBMS_OUTPUT.PUT_LINE();で表示することってできますか? (PHPのecho var_dump();のような感じで) (2)ある配列変数に使用されている添え字(もしくは添え字の数)を取得することってできますか? (3)ORA-01403エラーはカーソルのデータが存在しない場合に、発生するケースはありますか? よろしくおねがいします。

  • 【PL/SQL】LOOPした動的SQLにてFETCHができない

    OracleのPL/SQLで FOR .. LOOP内にて動的SQLを使い SELECTしてきた値を順次FETCHして配列に格納していきたいのですが、 LOOPの1件目のみFETCHがされて2件目以降は全てNULLになってしまいます。SQL文は間違っていません。DBMS_SQL.LAST_ROW_COUNTで1件以上の検索結果があることも確認済みです。 なぜでしょう?教えて下さい! EXECUTE IMMEDIATEをLOOP内で使うことに問題あり? 簡略化した例です。p_noにはすでに文字列格納済みと見てください。 txtsql VARCHAR2(1000); -- 動的SQL mkin INTEGER; fornum1 INTEGER; max_count INTEGER; -- ループされる最大件数 TYPE type_mkin IS TABLE OF NUMBER(10) INDEX BY BINARY_INTEGER; TYPE type_pno IS TABLE OF CHAR(10) INDEX BY BINARY_INTEGER; mkin type_mkin; p_no type_pno; BEGIN FOR fornum1 IN 1 .. max_count LOOP txtsql := 'SELECT SUM(TPSV_NO) ' || ' FROM ACTV || ' WHERE PRI_NO= ' || p_no(fornum1); EXECUTE IMMEDIATE txtsql INTO mkin(fornum1); DBMS_OUTPUT.PUT_LINE(mkin(fornum1)); END LOOP; END;

  • PL/SQLからPL/SQLのコール

    すみませんが、教えて下さい PL/SQLのソースからPL/SQLのソースをCALLする事は可能なのでしょうか? (プロシジャ・ファンクション等のストアドプログラムを使用せず) 知っている方がいましたら、回答をお願いしますm(_ _)m

  • javaでのストアド呼び出し

    前の質問に似た質問があったのですが、 javaでのストアド呼び出しについて質問です 戻り値(Number型)を返すストアドを呼び出したいのですが ストアドは test で ストアド自体の引数は第1引数から第5引数までが IN で6番目がoutです。 String sql = "{ ? = call test(?,?,?,?,?)}" CallableStatement cstmt = con.prepareCall(sql); cstmt .registerOutParameter( 1, java.sql.Types.INTEGER );  //PL/SQLの戻り値 cstmt .setString( 2, "0" ); cstmt .setString( 3, "0" ); cstmt .setString( 4, "0" ); cstmt .setString( 5, "0" ); cstmt .setString( 6, "0" ); cstmt .execute(); try-catch内に上記ソースを記述し実行すると、エラーになってしまいます cstmt .registerOutParameter( 1, java.sql.Types.INTEGER );の部分が悪いと思うの出すが、PL/SQLのNUMBER型は java.sql.Types.INTEGER  ではいけないのでしょうか それとも書き方そのものがわるいのでしょうか? まわりにJavaが出来る人がいなく、困っています。 どなたか力を貸してください

    • ベストアンサー
    • Java
  • VB.netの配列とVB6の配列の違い

    VB6で画面を作成し、演算処理を行うDLLをVC6で作成しています。 下記のコードでVB6でSingle型の2次元配列を宣言しま、VCのDLLでエクスポートしている関数に渡 します。 VC6DLL側のコード---------- EXPORT void __stdcall TESTFUNC (float *pfData,long nSize{ } VB側のコード---------- 宣言 Declare Function TESTFUNC Lib "TEST.dll" (ByRef pfData As Single, ByVal nSize As Long) As Long 配列宣言 Public sngDat(999,1) as single 呼び出し TESTFUNC sngDat(0,0),1000 このように呼び出した場合、VC6のTESTFUNC にブレークポイントを設定し、停止するとpfDataの ポインタをインクリメントした場合、sngDat(0,0),sngDat(1,0),sngDat(2,0)と、1次元目の添え字を インクリメントした状態になるように、メモリに格納されています。 この動作を前提として、VB.net側でも同じように呼び出してみました。 VB.net側のコード---------- 宣言 Declare Function TESTFUNC Lib "TEST.dll" (ByRef pfData As Single, ByVal nSize As Integer) As Integer 配列宣言 Public sngDat(999,1) as single 呼び出し TESTFUNC(sngDat(0,0),1000) VC側は全く同じコードを利用するとします。 同じように、VC6のTESTFUNC にブレークポイントを設定し、停止するとpfDataの ポインタをインクリメントした場合、sngDat(0,0),sngDat(0,1),sngDat(1,0)と,sngDat(1,1)、と1次元目の添え字を インクリメントせず、2次元目の添え字をインクリメントした状態になるように、メモリに格納されています。 VB6→VC6のDLLの場合の配列渡しと、VB.net→VC6のDLLの場合の配列渡しで違いがあるのは 何故でしょうか?また、VB.net側の配列渡しの仕様を、VB6側の仕様に合わせる方法は無いのでしょうか? よろしくお願いいたします。

  • C言語の課題丸投げ

    C言語の課題丸投げ 5×5の魔方陣を作成するという課題なのですが、手順があります。 (1)配列を用意する (2)配列を初期化(0クリア)する。 (3)配列添字にスタート位置をセットする。 (4)法則に従い、配列に魔方陣データをセットする (5)配列を画面に表示する  (二重ループ) 以上です。わかる方がいたらお手数ですが、ソースコードだけでいいので、教えてください。 お願いします。

  • バイナリ形式で読み込み時の配列に入る値について

    filecsvにCSV形式のデータが含まれているときに 以下のソース(一部抜粋)でGet #1,,bytArray で配列bytArrayにfilecsvの全データを読み込んでいると思うのですがその時にbytArray(0) bytArray(1)の配列を用意すればそれらはどういう形で配列の中に値が入るのでしょうか? よろしくお願い致します。 Dim Fileno As Integer Dim bytArray() As Byte Open filecsv For Binary As Fileno ReDim bytArray(1) Get #1, , bytArray … … Close #Fileno

  • PL/SQLのエラー処理について

    PL/SQLを勉強し始めたのですが、テーブルを作成してから、データを流し込むという処理をしたいのですが、テーブルの作成に失敗しらたら、処理を終了させるという処理はできないのでしょうか? それとも、考え方が違うのでしょうか?アドバイスお願いします。 次のようにPL/SQLを作成しています。 例) declare curHandle1 INTEGER; begin curHandle1 := DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE(curHandle1, 'create table xxx as select * from xxx where ID=-1', DBMS_SQL.V7); DBMS_SQL.CLOSE_CURSOR(curHandle1); exception when OTHERS then エラーになったら、処理終了したい(次のブロックにいきたくない) end; declare begin      insert into xxx NOLOGGING values (1,'test'); end; よろしくお願いします。

  • [C言語] 配列が添字の意味を失う理由

    はじめまして。こんばんは。 早速ですが、下記のソースコードは、 配列aの各要素の内容を先頭から順に調べ、最初に0であった要素の添字番号を表示する。 という内容の、C言語のプログラムです。(C++でコンパイルするためmain()はint型に指定) そこで、このプログラムを実行していて腑に落ちない点として、 プログラムの挙動を見る限り、 タイトルに書いたとおり、 「配列が添字の意味を失っている」という事なんです。 普通に配列の添字と考えれば、 while文の条件式は、 int i=0; while(a[i]) { i++; } なので、a[0]になるはずなので、 普通に考えれば 条件式の中身としては  配列a[0] が 配列a[0] になるまでi++をするとなるはずです。 しかしながら、このプログラムは、 初期値に「0」が入っている要素まで探し続けます。 なぜ、 「配列が添字の意味を失うのか?」 どなたか、この疑問にお答えしていただけますと幸いです。 「プログラムの内容」 配列aの各要素の内容を先頭から順に調べ、最初に0であった要素の添字番号を表示する。 「表示結果」 a[2]= 0 「ソースコード」 #include<stdio.h> int main() { int a[]={3,0,7,8,5,5,8}; int i=0; while(a[i]) { i++; } printf("a[%2d]=%2d \n",i,a[i]); }