EXECUTE procedure 'para1','para2'
で正しい結果が返ってくるストプロがあります。
これをSELECT文の中で結果を返すようにするには
どんな書き方をすれば良いのでしょうか?
ストアドプロシージャを作成したのは今回が初めてで
試行錯誤しながらなんとか結果が返せるようになった
のですが、私がISQLで試した方法ではうまく行きません。

<私の試した方法>
SELECT procedure(tabe1.para1,tabe1.para2)
FROM table1

SELECT文でストプロを実行することはできないのでしょうか?
宜しくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

このプロシージャはテーブルの項目名を返すのでしょうか?


だとしてもこういった使い方は出来なかったと思います。

もし、そのプロシージャが結果として表(Select結果)を返すのであれば
プロシージャ内でビューを作成し、
そのビューに対して再度Selectを発行すれば良いと思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。
私の考えていた処理名内容はpara1,para2の値を受け取って
それぞれの値によって数値を返すようなもので、それを
ソート順として使うことを考えていました。

SQLは問題なく作成できるのですが、ストプロやビューを
使う経験が浅いのでまだ少し時間がかかるとおもいますが
何とかやってみたいとおもいます。

お礼日時:2001/02/18 07:20

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

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

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

QAccessのSELECT文の結果でナンバリングする方法

Access2000のクエリで、以下のSQL文を作っています。
 SELECT TB.項目1, TB.項目2, TB.項目3
 FROM TB
 ORDER BY TB.項目1, TB.項目2;

テーブルには、以下のデータが登録されています。
 項目1 項目2 項目3
 ----------------------
 あああ 345 CCC
 いいい 234 AAA
 あああ 123 BBB

現在のクエリ結果表示は以下のようになっています。
 項目1 項目2 項目3
 ----------------------
 あああ 123 BBB
 あああ 345 CCC
 いいい 234 AAA

これを、以下のようにナンバリングをつけて結果表示するSQL文を教えていただけないでしょうか?
 No 項目1 項目2 項目3
 ----------------------
 1 あああ 123 BBB
 2 あああ 345 CCC
 3 いいい 234 AAA

Aベストアンサー

Access の場合、SQL だけではできないみたいです。
( Oracle だとROWNUM とか ROW_NUMBER が使えますが。)
こちらが参考になるかと。
http://support.microsoft.com/default.aspx?scid=kb;ja;410756

参考URL:http://support.microsoft.com/default.aspx?scid=kb;ja;410756

QPostgresSQL のSQL文について(SELECT) :2

テーブル図があまりにもずれているため投稿しなおします。
PostgresであるSelect文がわかりません。

以下のテーブルより
*KOUMOKU*[テーブル名]
SUB1|SUB2|SUB3|SUB4|SUB5|ID_NAME
A01  |    |    |    |   |大項目1
A01  |B01  |    |    |   |大項目2
A01  |B01  |C01  |    |   |大項目3
A01  |B01  |C01  |D01  |   |大項目4

大項目1~大項目4の値(ID_NAME)を一気に取得する
SELECT文がわかりません。
「大項目1 大項目2 大項目3 大項目4」という検索結果を得たいです。
よろしくお願いいたします。

Aベストアンサー

見たままの情報からいくと、以下のような感じでしょうか。
(見づらくてすみません。)
考え方としては、SUB1を取得するためのサブクエリーL1、SUB2用のL2…とそれぞれ作成して結合しています。


SELECT L1.ID_NAME,L2.ID_NAME,L3.ID_NAME,L4.ID_NAME
FROM
      (SELECT * FROM KOUMOKU WHERE SUB1 IS NOT NULL AND SUB2 IS NOT NULL AND SUB3 IS NOT NULL AND SUB4 IS NOT NULL AND SUB5 IS NULL) L4
LEFT JOIN (SELECT * FROM KOUMOKU WHERE SUB1 IS NOT NULL AND SUB2 IS NOT NULL AND SUB3 IS NOT NULL AND SUB4 IS NULL AND SUB5 IS NULL) L3 USING (SUB1,SUB2,SUB3)
LEFT JOIN (SELECT * FROM KOUMOKU WHERE SUB1 IS NOT NULL AND SUB2 IS NOT NULL AND SUB3 IS NULL AND SUB4 IS NULL AND SUB5 IS NULL) L2 USING (SUB1,SUB2)
LEFT JOIN (SELECT * FROM KOUMOKU WHERE SUB1 IS NOT NULL AND SUB2 IS NULL AND SUB3 IS NULL AND SUB4 IS NULL AND SUB5 IS NULL) L1 USING (SUB1)

見たままの情報からいくと、以下のような感じでしょうか。
(見づらくてすみません。)
考え方としては、SUB1を取得するためのサブクエリーL1、SUB2用のL2…とそれぞれ作成して結合しています。


SELECT L1.ID_NAME,L2.ID_NAME,L3.ID_NAME,L4.ID_NAME
FROM
      (SELECT * FROM KOUMOKU WHERE SUB1 IS NOT NULL AND SUB2 IS NOT NULL AND SUB3 IS NOT NULL AND SUB4 IS NOT NULL AND SUB5 IS NULL) L4
LEFT JOIN (SELECT * FROM KOUMOKU WHERE SUB1 IS NOT NULL AND SUB2 IS NOT NULL AND SUB3 IS...続きを読む

QDB2でSelectした時(rollback,commitの必要性)

Oracleでの開発が長く、DB2は初めてなので戸惑ってます。
OracleでSelect文を発行する時はトランザクション処理が発生しているわけではないので、rollbackやcommitはしないのですが、DB2を使った今回のシステムではselectをした後でrollbackやcommitを使用するように設計書記述がされています。

必要ないような気がするのですが、DB2ではSelectでも必須なのでしょうか?

ご回答よろしくお願いします。

Aベストアンサー

そもそも、SELECT文であってもトランザクションは発生しています。DB2に限らず、ORACLEでもSQL Serverでも、DBMSならば皆そうです。もし明示的に行っていなかったとしても、暗黙的には最終的にCOMMIT/ROLLBACKがされているはずです。

ORACLEの場合、コミット前の修正中のレコードに関しては、UNDOセグメントの内容を見せるのに対して、DB2やSQLServerではロック待ちになりますね。このあたりはDBMSの考え方の違いによるものであり、面白いところです。

細かい話になりますが、トランザクションの「分離レベル」の設定により、SELECT時の取られるロックが変わってきます。
ロックに関しては、
http://www-6.ibm.com/jp/software/data/db2univ/lab/ise/techlib/v71design_05.html

を読んでみてください。一番わかりやすい日本語のドキュメントじゃないかしら。。

Q【SQL】SELECT 文で外部のレコードと比較する。

こんにちわ

タイトルがわかりにくく申し訳ありません。^^;)

【やりたい事】
○テーブルA に下記のレコードが有ります。

ID FIRSTNAME  LASTNAME

00 ICHIRO     SUZUKI
01 TARO      YAMADA
02 TSUYOSHI   SHINJYO


○テーブルB に下記レコードが有ります。
ID LASTNAME

00 SUZUKI
01 SASAKI

ここで テーブルB に登録されている LASTNAME と同じ LASTNAME を持つレコードを テーブルA から抽出する SQL を教えて頂けないでしょうか?
この状態で抽出されるレコードは
00 ICHIRO SUZUKI です。

お時間のある時で構いませんので、よろしくお願い致します。

Aベストアンサー

データベースとして、何を使用されているか不明でしたので、Oracle で
確認してみました。
SQL> select * from tab1;
    ID FNAME      LNAME
---------- ---------------- ----------------
     0 Ichiro      Suzuki
     1 Taro       Yamada
     2 Tsuyoshi     Sinjyo

SQL> select * from tab2;
    ID LNAME
---------- ----------------
     0 Suzu
     1 Sasa
     2 inj

上記の状態で、先頭一致をさせる場合
SQL> Select tab1.id, fname, tab1.lname from tab1, tab2
   where substr(tab1.lname, 1, length(tab2.lname)) = tab2.lname;
    ID FNAME      LNAME
---------- ---------------- ----------------
     0 Ichiro      Suzuki

部分一致をさせる場合
SQL> Select tab1.id, fname, tab1.lname from tab1, tab2
   where instr(tab1.lname, tab2.lname) > 0;
    ID FNAME      LNAME
---------- ---------------- ----------------
     0 Ichiro      Suzuki
     2 Tsuyoshi     Sinjyo

でどうでしょうか?
substr, instr と同等の関数は、Oracle 以外でも用意されていると
思いますので、他のデータベースでも使えると思います。

データベースとして、何を使用されているか不明でしたので、Oracle で
確認してみました。
SQL> select * from tab1;
    ID FNAME      LNAME
---------- ---------------- ----------------
     0 Ichiro      Suzuki
     1 Taro       Yamada
     2 Tsuyoshi     Sinjyo

SQL> select * from tab2;
    ID LNAME
---------- ----------------
     0 Suzu
     1 Sasa
     2 inj

上記の状態で、先頭一致をさせる場合
SQL> Select ...続きを読む

Qプロシージャのexecute権限

ストアドプロシージャを作成し、createまで行ったのですが、実行させようとしたらexecute権限がありません というエラーが出たので、
調べたみたのですが、grantというのでexecute権限を付与してあげなくては
いけないと知りました。

grantの書き方について教えてください。
プロシージャ名:test
サーバー名:testserve
ユーザ名:test

の場合、どのようにtestというプロシージャに実行権を与えればよいのでしょうか?

Aベストアンサー

GRANT EXECUTE ON プロシージャ名 TO ユーザ名

でできますよ。


人気Q&Aランキング

おすすめ情報