• 締切済み

DynamicSQL

UnixCにて、Net8(Oracle)を使用しDBへのアクセスについてです。 役割が共通のインターフェースという位置付けの為、SQL文は送られてきたものを解析せずに、そのままNet8へ送信します。UPDATEやINSERTなら戻り値はOK/NG程度で済むのですが、SELECTだと、複数の項目で複数のレコードの抽出結果を返さなければなりません。レコード数は良いとして、複数の項目がネックになっています。なぜなら、SQLを解析していない為、項目数もその属性もわからないからです。 項目とその属性を引数としてもらえば可能ですが、現実的には使いにくいインターフェースになってしまいます。そこで、DynamicSQLとやらを使用して、SQLを発行する前に、どういう属性のものが結果として帰ってくるか調べる方法があるらしいと聞き、いろいろ調べているのですが、どうもよく解りません。 この辺について、詳しい方、何かご存知の方がいらっしゃいましたら どんな事でも構いませんので、情報を頂きたく、宜しくお願いします。

みんなの回答

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

感じからするとOCIを直接コールしているように見受けられますので、こちらを紹介します。 Oracle Technology Network http://otn.oracle.co.jp/tech/oci/index.html 資料をダウンロードするには登録する必要があります(無料)

参考URL:
http://otn.oracle.co.jp/tech/oci/index.html
ike_aqc
質問者

補足

OCIは使用していませんが、少し興味を持ったので、調べてみます。

関連するQ&A

  • 長いSQL文を実行するには?

    Oracle10gを使用しています。 数千バイトある長いSQL文(insert処理です)を実行したいのですが、どうやらバイト数の制約の為にinsert出来ません。 何か対処方法があれば、教えてください。 よろしくお願いします。

  • Oracle10gからkeySQLで集計データ

    Oracle10gでデータ管理していますが、インターフェースを外注した為、自由なデータ加工ができません。この為、keySQLを用いて、データをExcelとして取出し、Access2003にインポートして解析する方法で対応しています。 しかし、Excelで一度に取り出せるレコード数が65500程度に限られ、効率的にデータ取出しが出来ません。そこで、keySQLで、集計してレコード数を減らして取り出したいと思います。 しかし、Accessのクエリーデザイン画面のような集計ボタンが見当たりません。GUI的には集計できないという事でしょうか?クロス集計はできるようなのですが、Accessのような集計は、SQL文を直接記述する方法しかないのでしょうか? keySQLにお詳しい方がおられましたら、データ集計の仕方をご教示下さい。 当方、残念ながら、まだSQL文を直接記述できるレベルにはありません。

  • oracle10g update件数の取得方法

    oracle10g update件数の取得方法 pl sql(stored procedure)で複数のupdate文を適用します。update後にupdateしたレコード件数をログテーブルにinsertしたいのですが、updateしたレコード件数を取得する方法はありますか?

  • Access にて DISTINCROW を使用した INSERT SELECT

    お世話様です。 Access2003 VBAにて、DoCmd.RunSQLを使用してSQL文を流す際、 普通のINSERT-SELECT文はOKですが、 そのSELECT文にDISTINCROW句を使用していると、 数百件程度のSELECT結果しかINSERTできません。 本当は数千件のSELECT結果をINSERTしたいのですが、 これを実行した場合、エラーにもならず、1レコードもINSERTされません。 ためしに、DINSTINCTROWではなく、SQL文を変更してDISTINCTにしてみたところ、 2000件以上でもINSERTできました。 DISTINCROW句を使用して数千件でもINSERTできる方法はあるでしょうか? ちなみにSELECT単体ですと、DISTINCTROWを使用していながら、 数千件でも結果を表示できます。 SQL例: str_SQL = " INSERT INTO 結果テーブル(フィールド1, フィールド2, フィールド3)  SELECT DISTINCTROW A.項目1, A.項目2, B.項目1  FROM テーブル1 A, テーブル2 B  (WHERE句はあってもなくても現象変わらず)  ORDER BY A.項目4 ASC, A.項目5 ASC " DoCmd.RunSQL (str_SQL) よろしくお願いいたします。

  • テーブルのマッチングについて

    ORACLE10gを使用しています。 AとB同じレイアウト(キーも同じ)のテーブルがあります。 この2つのテーブルを比較して、 (1)Aテーブルのみにあるもの:1レコードCテーブルに追加 (2)Bテーブルのみにあるもの:1レコードCテーブルに追加 (3)A、B両方にあるもの:2レコードCテーブルに追加 上記に該当するレコードをCテーブルにINSERTしたいです。 実は、Cテーブルに項目が1つ追加されまして「区分」を書く必要があります。 どのパターン((1)か(2)か(3))でINSERTしたデータかです。 (1):1、(2):2、(3):3をセットする どのようにSQLを作成すると実現できるのでしょうか? ご指導よろしくおねがいします。

  • 一気に複数のレコードをinsertする方法について

    SQLのinsert文で一気に複数のレコードを挿入する方法ってありますか? SQL*LoaderとPL/SQL以外でお願いします。

  • レコードの選択の仕方

    sqlのチューニングが得意なOracle Master所有者です。 ちょっとわからないことがあるので教えてください。 KEY1, KEY2でソートし、 ・先頭レコード ・最終レコード ・項目A1~A100の値が変わったレコード を出力したいのですが、どうすればよいでしょうか? レコード数は約7万で、「SQLで」驚速で処理したいです。 中間テーブルを使用して、特別なインデクスや編集を使用する例でも構いません。 例)★が出力するレコード KEY1 KEY2 A1 A2 A3 ... A100 A 1 0 1 0 0 ★ A 2 0 1 0 0 A 3 0 2 0 0 ★ A 4 0 2 0 0 A 5 0 1 0 0 ★ A 6 0 2 0 0 ★ ... A 60 0 2 5 0 ★ B 1 0 1 0 0 ★ B 2 0 1 0 0 B 3 0 0 0 0 ★ B 4 0 0 1 0 ★ B 5 0 0 1 0 ... B 70 0 2 5 0 ★ C 略

  • 日付データ挿入

    すみません。 BOから取得したデータをSQL Server にエクスポートして その中の日付の項目のデータがたとえば、 "2006/10/06 00:04:30"みたいにセットされていて そのデータをAccsessVBAで自分のローカルのDBにINSERTしようとするとエラーになります。 SQL Server に "20061001"のような値が入ってるレコードはINSERTできるのですが・・・。 "2006/10/06 00:04:30"のようなデータはINSERTするとき何か編集をしないといけないのでしょうか? よろしくお願い致します。

  • 項目内の改行がレコードの終わりと判定されてしまう

    SQL*PLUSでORACLEデータを単純にテキストファイルに書き出したいのですが、項目内に「改行」があるとレコードが複数行に分かれていまい、上手くいきません。 項目内の「改行」のみ(レコード終端の本来の「改行」は残す)を削除して前詰めする(または空白に置き換える)方法をご存じの方ご教示いただけないでしょうか。 例) SET COLSEP ',' SPOOL D:\出力ファイル.txt SELECT      項目1 || 項目2 || 項目3 FROM テストテーブル ; SPOOL OFF;

  • INSERT文とUPDATE文の使い分け

    いつもお世話になっております。 MYSQLで x_table ID SUBID  1  aaa 2 aaa 3 bbb 4 ccc というテーブルがあったとして、「IDが 1 かつ、SUB_IDが aaa」の項目が存在する場合はUPDATE、存在しない場合はINSERT、という形でSQLを使い分けたいと考えています。 現在は SELECT * FROM x_table WHERE ID=1 AND SUBID='aaa' というSQLでレコードの存在確認をし、その結果によりif文でUPDATE文とINSERT文を使い分けているのですが、レコードの存在確認とINSERTやUPDATEのSQLを一つにまとめる事が出来るようなやり方って無いでしょうか? 無さそうな場合は「無い」とだけでも答えていただけるとうれしいです。

    • ベストアンサー
    • PHP