• 締切済み

Oracle Pro*Cについて

オラクル、Pro*C 初心者です。 Pro*CでのVARRAY型の操作についてですが、 よくわかりません。 例えば、 配列宣言 create or replace type varray_t as varray(100) of varchar2(100) テーブル宣言 create table v_table ( f_key char(10), f_array varray_t ) とあり、表"v_table"の検索を行いたいのですが、 Pro*Cの中でのホスト変数の宣言のしかた、 SELECTやFETCHでのホスト変数へのセットのしかたがわかりません。 手元にマニュアルがなく、また時間もないためあせっています。 どなたか、回答よろしくお願いします。

みんなの回答

  • masabou7
  • ベストアンサー率18% (2/11)
回答No.1

assy21さん こんにちは 参考になるか分かりませんがURLを紹介します。 頑張って下さい。

参考URL:
http://ash.or.jp/ash/db/ora_c.htm

関連するQ&A

  • PRO*Cでテーブル名にバインド変数は使えますか?

    PRO*Cのプログラムで、テーブル名とカラム名をパラメータで 受け取って、ホスト変数(バインド変数?)に代入して、 それぞれ、SELECT文等で使用できますか? PL/SQLなら出来るでしょうか? EXEC SQL BEGIN DECLARE SECTION; varchar t_name[64]; /* テーブル名 */ varchar col_name[64]; /* カラム名 */ EXEC SQL END DECLARE SECTION; /* 中略 パラメータの値をホスト変数に代入する処理を行う */ ↓以下のように出来ますか? SELECT :col_name FROM :t_name ;

  • Pro*CとCの間|変数の有効範囲

    Cにおいて、「自動変数」と「広域変数」という区別がありますが、 Pro*Cにおいては別に「クライアント変数」と「ホスト変数」という 分け方があります。 これについて、ホスト変数をグローバルで宣言したときと 自動変数で宣言したときとで、 クライアント変数と同じような別々の使い方が出来るのでしょうか。 早い話、ホスト変数に、自動変数とグローバル変数の区別はあるのでしょうか。

  • Pro*CでのSQL文について

    こんにちは。 Pro*CでSQLを実行しようとしています。 varchar table_data[200]; (略) EXEC SQL SELECT aaa, bbb, ccc INTO :table_data FROM SAMPLE (略) のようにしてSAMPLEテーブルの列(aaa,bbb,ccc)を変数table_dataに 格納したいと考えています。(もちろん、現在はtable_dataにはaaaの値しか 入っていません(泣)) こういった漢字で変数table_dataに選択列(複数)を取得できるような考えは あるのでしょうか? ちなみにaaa,bbb,cccの区切り文字は考えなくても構いません。 ご多忙でしょうが、どのたかご回答宜しくお願い致します。

  • ROWID型の宣言について(Pro*C)

    (Oracle9i) Pro*Cにて、ROWIDを使用したSELECT&INSERTをしたいのですが、 ホスト変数をROWID型で宣言しようとするとエラーになります。 [PCC-S-02201, 記号"rowid"が見つかりました。 次のうちの1つが入るとき~] 宣言の仕方は以下の通りです。  EXEC SQL BEGIN DECLARE SECTION;   rowid fetch_ROWID;   short fetch_ROWID_ind;  EXEC SQL END DECLARE SECTION; ROWIDという型はORACLEにあるので、なぜプリコンパイルが通らないのか 分かりません。 どなたかお分かりになる方がいらっしゃいましたらよろしくお願いいします。 ちなみに以下のような使い方をしようとしていますので、参考までに 載せておきます。  EXEC SQL DECLARE C_XXX CURSOR FOR   SELECT ・・・,ROWID FROM XXX FOR UPDATE ・・・  EXEC SQL OPEN C_XXX;  EXEC SQL WHENEVER NOT FOUND DO break;  while(1){   EXEC SQL FETCH C_XXX INTO    ・・・,    :fetch_ROWID:fetch_ROWID_ind;   EXEC SQL    UPDATE XXX    SET ・・・    WHERE ROWID=:fetch_ROWID:fetch_ROWID_ind;  }

  • Pro*CでVARCHAR2項目の検索

    こんにちは。たぶんとても基礎的なことと思うのですが。。。 Pro*CでSELECTするとき、WHERE句の中でVARCHAR2項目を条件に入れています。 が、どうも検索がうまくできなくて質問しました。 ホスト変数の定義…  char VVV[5]; 検索するところ… select xxx into :yyy from ZZZ where ZZZ.varchar2no4BYTE = :VVV ; のような感じです。ZZZ.varchar2no4BYTEの型はVARCHAR2(4)です。 で、ZZZ.varchar2no4BYTE が"1234"と"12"の2つのレコードを 登録しておいて、VVVに"1234"を入れると、ちゃんと検索できました。 んが、VVVに"12"を入れても検索されません。 そんなのあり?と VVVに"12 "を入れてもだめ、 VVVをVARCHAR構造体?にして、"12"で長さ2にしてもだめ、 だけどZZZ.varchar2no4BYTEがCHAR(4)だと"12"でOK、 なんなんだとPro*Cのマニュアル見てもNUMBER型の検索例ばかり、 というところで力尽きました。 (あー、CHAR_MAP=STRING って関係あるですかね) 動的SQLにすればよいのかもしれませんが、事情で使えないのです。 それ以前にホスト変数の理解が間違っているのではないかと思い、 お聞きするしだいです。

  • オラクルのテーブルについて

    質問があります。 SQL文で指定したテーブル(test_tbl)のCREATEされた 日時とかわかるようなものはないでしょうか? たとえばテーブル (table_a, table_b, teble_c:全て同じ構成だが格納データが異なる)が あって一番最後に作成されたテーブルに アクセスしたい場合なんですが どのようなSQL文になるでしょうか? またそんな事はSQLではかけないような場合、 どのようにすればテーブルのクリエート日付を取得 することができるでしょうか? 宜しくお願いいたします。

  • ORACLE <DATE型の作成>

    Table作成でデータ型にバイト数4をいれて作成したいのですが作成できません。 create TABLE abc ( SSSS Varchar2(10), Date DATE(4) ) これを実行すると Date DATE(4)のところで 右カッコがありませんというエラーがでます。原因がわからず困惑しています。 どなたかご教授お願いします。

  • カーソルで取得した項目のサイズについて質問です。。

    カーソルで取得した項目のサイズについて質問です。。 SELECTした項目のサイズが下記の場合、 レコード格納変数.Cの最大サイズは(14)で、それ以上のバイト数値を代入すると エラーになると思ったのですが、エラーになりませんでした。(最大28バイトになった) レコード格納変数の取得した項目サイズは何で決まってくるのでしょうか? この項目を別テーブルのVARCHAR(20)の項目へ設定しようと思っているのですが、 理由がわからないので、このままでいいのか、サイズを考慮した設計にするべきか困っています。 <oracle 9i> TABLE1{A VARCHAR2(4), B VARCHAR2(10)} DECLARE  CURSOR カーソル変数 IS SELECT A||B AS C FROM TABLE1;  レコード格納変数 カーソル変数%ROWTYPE; BEGIN  OPEN カーソル変数  LOOP   FETCH カーソル変数 INTO レコード格納変数;   EXIT WHEN カーソル変数%NOTFOUND;    :    レコード格納変数.C := VARCAHR2(15) --代入可能?    :    INSERT 項目1 VARCHAR(20) TABLE2 レコード格納変数.C;    :  END LOOP  CLOSE カーソル変数 END;

  • Oracle9i  v$sysstatの解釈

    Windows版 Oracle 9iで、下記のSQLを実行した値で質問なのですが・・・ <<SQL>> Select name, value from V$SYSSTAT where name like 'table%'; <<SQL結果>> NAME VALUE ---------------------------------------------------------------- ---------- table scans (short tables) 41298 table scans (long tables) 171 table scans (rowid ranges) 0 table scans (cache partitions) 0 table scans (direct read) 0 table scan rows gotten 151275758 table scan blocks gotten 11959596 table fetch by rowid 23079146 table fetch continued row 1048 table lookup prefetch client count 0 Webで検索すると、 Full Scan率は「table scans (long tables) / ( table scans (short tables)+table scans (long tables) )」とあったり、 「table fetch by rowid < table scan rows gotten」は頻繁にFull Scanしている状態とあって、「table scan rows gotten」がFull Scanの行数に思えるですが、実測した下記の値からは違うように思えるのですが、どのように解釈すれば良いのでしょうか? table scans (short tables) 41298 table scans (long tables) 171 ---- table scan rows gotten 151275758 table fetch by rowid 23079146

  • ストアドプロシージャでのパラメータのデータ型の質問

    いつもお世話になっております。たびたびの質問で恐縮です。 ストアドプロシージャでのパラメータのデータ型が設定できず困っております。たとえば次はパラメータの文字を表示させるものです。 CREATE OR REPLACE PROCEDURE test(p VARCHAR2(10)) IS t VARCHAR2(10); BEGIN t:=p; DBMS_OUTPUT.PUT_LINE(t); END; / コンパイルエラーになるので、パラメータのデータ型を、VARCHAR2のように(10)を取るとうまくいきます。しかし、変数定義の「t VARCHAR2(10)」の(10)を取ると文字列の制約制限からはずれるとのエラーになります。 VARCHAR2というのは、PL/SQLの変数あるいはパラメータではどのように記述すればよろしいのでしょうか。 基本的なことを理解しておらず、申し訳ありません。 どうか、よろしくお願いいたします。