こんにちは。
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の区切り文字は考えなくても構いません。

ご多忙でしょうが、どのたかご回答宜しくお願い致します。

A 回答 (2件)

>構造体の宣言はそのまま(受け皿2つ)で、取得するデータは1つということなんですが・・・


> ※受け皿M個、取得データN個(M>Nの関係)です。

申し訳ないですが、私にはわからないです。
私の場合は、発行する SQL ごとに構造体を用意しているものですから。

--- 以下、私の勝手な流儀 --------------------------------------------
個人的にはそのような処理はしない方がいいような気がします。
適切な入れ物に適切なデータを入れる、という発想でコーディングされた方が、
ソースの可視性とか、メモリの無駄遣い、といった観点で見たときに
いいように思います。
---------------------------------------------------------------------
    • good
    • 0
この回答へのお礼

確かに2ndさんがおっしゃる通りだと思います。
私も適切な入れ物に適切なデータを入れるべきだと思います。

今回の場合、取得データが1~600もあります。
もう少し考えてみます。

ご多忙の中、ご返答いただき感謝します。
ありがとうございましたm(_ _)m

お礼日時:2002/03/07 09:06

一つの配列に複数の値を格納する方法は知らないのですが、


ご質問のような状況で私が用いている方法をお知らせしておきます。

struct kozo{
  VARCHAR c1[10];
  VARCHAR c2[10];
}kozo_data;

struct kozo_ind{
  short c1_ind;
  short c2_ind;
}kozo_data_ind;

のような構造体を定義し、

EXEC SQL select c1, c2 INTO :kozo_data INDICATOR :kozo_data_ind
FROM t1;

というように、INDICATOR を指定してやることで、
構造体 kozo_data に select されたレコードが格納されます。
もちろん、初めに構造体 kozo_data を初期化させる必要があります。

このやり方ではどうでしょうか?
    • good
    • 0
この回答へのお礼

ありがとうございました。で、で、できました!!。

そこでもう一つご質問があるのですが・・・
2ndさんがかかれたプログラムに

EXEC SQL select c1, c2 INTO ・・・

と書かれていますが、そのときc1, c2の部分をc1のみにはできない
ものなのでしょうか?

構造体の宣言はそのまま(受け皿2つ)で、取得するデータは1つということなんですが・・・
※受け皿M個、取得データN個(M>Nの関係)です。

ご多忙の中くだらない質問にお答えくださっていただいたのに
またくだらない質問をして申し訳ありません。

宜しくお願い致します。

お礼日時:2002/03/06 18:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qファイルbbb.fp5のスクリプトbbbからaaa.fp5のスクリプトcccを実行させたいが

ファイルメーカーProを、1カ月前から始めた
初心者です。
使用環境:WindowsXP、ファイルメーカーPro6

1.ファイルaaa.fp5(スクリプトaaaは、自動立上げに設定)を開く。
 スクリプトaaaの内容
  ・開く[bbb.fp5]
2.ファイルbbb.fp5(スクリプトbbbは、自動立上げに設定)を開く。
 スクリプトbbbの内容
  ・開く[bbb.fp5]
  ・全レコードを表示
  ・レコードのエクスポート
このあと、ファイルaaa.fp5のスクリプトcccを
実行させたいが、・レコードのエクスポートのあとに
何を選んで記述させたらよいか、分かりません。
教えて下さい。

Aベストアンサー

スクリプトbbbの続きに
 ・スクリプト実行[外部:スクリプトccc]

スクリプト実行のステップで下のオプション:指定の
ポップアップメニューの一番下に「外部スクリプト」の
指定があります。

Q【緊急】ADO で SELECT * INTO aaa From bbb で時間切れになる原因は?

SELECT * INTO 新規テーブル From テーブル元
で、新しいテーブルを作る時に時間切れになってしまいます。

自分が思いつくことは テーブル元 のテーブルを誰かが
つかんでいることぐらいなのですが、その様子はありません。

他に考えられる要因を至急教えて下さい!
SQLSERVER2000
WINDOWS2000

テーブル元の件数が関係ありますでしょうか?

Aベストアンサー

件数が関係するか調べるのであれば、

SELECT * INTO 新規テーブル From テーブル元
WHERE 1=2

のように、ありえない条件を記述して空のテーブルを作ってみれば確認できます。

件数が多いというのであれば、単純にタイムアウトしているだけでは?

排他制御でロックがかかっているということはないんですよね?

QVSAM,QSAM,BSAM,BPAM,BDAM

データセット編成とアクセス法に関してですが、それぞれ、どのようなデータセットとして使われることが多いですか?データを入れるとか…、プログラムを入れるとか…。

Aベストアンサー

メインフレームの世界ですね。私が使い慣れているのは
NEC製ですが、共通項が多いので説明します。

> BPAMがプログラムライブラリーか?
簡単にはその通りです。
プログラムだけではないですが、順編成のサブファイル
を複数格納可能な編成方式のファイル(ライブラリ)を
意味します。

> VSAMがDB?QSAM,BSAMがテープとディスクか?
VSAMはDBの原型みたいなものです。
カタログ/VSAMファイル本体以外にジャーナルを持ち、
COMMIT,ROLLBACK制御も可能です。
QSAM,BSAMはVSAMアクセスの動作方式のことで
す(プログラム中では意識する必要ありません)。

> BDAMはディスクか???
これもアクセス方式ですね。目的レコードの相対アドレ
スを指定してアクセス(READ/WRITE)する方式です。

> DBやJCL、ファイルを入れる場合はBPAMか?
DBは別物です。JCL、プログラム等が格納されるファイル
の形式(編成)がBPAMです。

> ボリュームという言葉があるけれど、データ編成で考えてはいけないのか?
ボリュームとは例えば磁気テープ1本、磁気ディスク1
スピンドルといった補助記録媒体の単位です。
→ 磁気ディスクには1ボリューム中に複数の異なる
  データ編成のファイルを作成可能です。

> ボリュームはどのようにできているのか?
VTOCおよびデータ領域です。

> ボリュームより大きいものはなんと言うのか?
通常ボリュームグループという概念があります。
→ この概念が無いとマルチボリュームファイルは作成
  できませんから・・・。

> 機能は、ちゃんと読んでみます。データ編成は他にもありそうな…。
NECの場合だと、相対編成、乱編成、待機結合編成なんて
のもありますね。

> ファイル編成とデータセット編成は同じことだよな…。???
大体において同じ意味で使用しているケースが多いです。

私の会社ではまだメインフレーム現役です・・・。

メインフレームの世界ですね。私が使い慣れているのは
NEC製ですが、共通項が多いので説明します。

> BPAMがプログラムライブラリーか?
簡単にはその通りです。
プログラムだけではないですが、順編成のサブファイル
を複数格納可能な編成方式のファイル(ライブラリ)を
意味します。

> VSAMがDB?QSAM,BSAMがテープとディスクか?
VSAMはDBの原型みたいなものです。
カタログ/VSAMファイル本体以外にジャーナルを持ち、
COMMIT,ROLLBACK制御も可能です。
QSAM,BSAM...続きを読む

QSQLでの変数の扱いについて

VBを利用してのSQL文に変数を使いたいのですが記述方法が良くわかりません。
まず
dim a as string
dim b as integer
dim c as integer
a="AAAA"
b=10
c=23500
として
テーブルZの項目1が nvarchar 項目2が tinyint 項目3がrealであった場合
sql文の記述方法をWebで探していると
文字列変数ならシングルクォーテーションでくくって代入
数値変数ならダイレクトに代入というようにとれるところがあったので下記の
様に記述すると更新されません
sqlstr=("UPDATE テーブルZ set 項目1='a',項目2=b,項目3=c where 項目=1")
下記のように分割してそれぞれひとつづつのテストすると更新できます
sqlstr=("UPDATE テーブルZ set 項目1=" & a & " where 項目=1")
sqlstr=("UPDATE テーブルZ set 項目2='" & b & "' where 項目=1")
sqlstr=("UPDATE テーブルZ set 項目2='" & c & "' where 項目=1")
上記の要領で1つにまとめると出来ないので,どのように書けばよいのでしょうか
よろしくお願い致します

VBを利用してのSQL文に変数を使いたいのですが記述方法が良くわかりません。
まず
dim a as string
dim b as integer
dim c as integer
a="AAAA"
b=10
c=23500
として
テーブルZの項目1が nvarchar 項目2が tinyint 項目3がrealであった場合
sql文の記述方法をWebで探していると
文字列変数ならシングルクォーテーションでくくって代入
数値変数ならダイレクトに代入というようにとれるところがあったので下記の
様に記述すると更新されません
sqlstr=("UPDATE テーブルZ set 項目1='a',項目2=b...続きを読む

Aベストアンサー

文字列と変数がごっちゃになってませんか?
解りやすく分けてみましょう。

sqlstr=""
sqlstr= sqlstr & "UPDATE テーブルZ "
sqlstr= sqlstr & "set 項目1='" & a & "'"
sqlstr= sqlstr & ", 項目2=" & cstr(b)
sqlstr= sqlstr & ", 項目3=" & cstr(c)
sqlstr= sqlstr & " where 項目=1"

いかがでしょうか?

QROW_NUMBER BY PL/SQL

こんばんは。

今PL/SQLで開発をしているのですが、PL/SQLでわからないことがあります。

日付のソート順に並べたデータの中から、何行目から何行目までのデータを取得、ということがしたくてROW_NUMBERを使ってSQL文を作成しました。
そのSQL文はきちんと動くのですが(データ取得できる)、それをPL/SQLにてカーソル宣言するとコンパイルエラーになってしまいます。
ROW_NUMBERの部分を削除するとコンパイルは通るので、原因はROW_NUMBERにあるようです。
しかしながら、ROW_NUMBERを使わずに、何行目から何行目までのデータ取得、ということが実装できるのか検討もつきません。
どうしてカーソルでROW_NUMBERが使えないのか?
ROW_NUMBERのかわりのようなコマンド、もしくは実装方法が存在するのか?

不明な点は補足させていただきますので、ご教示の程宜しくお願い致します<(_ _)>

Aベストアンサー

深く考えすぎ
カーソルオープンしてフェッチしながらループしてくんだから、
取得開始行までフェッチした内容を無視して、必要な行まで取得したらループを抜けてカーソル閉じるだけ


人気Q&Aランキング

おすすめ情報