• 締切済み

繰り返し処理の関数を作成したい。

環境 PostgreSQL 9.2 下記のようなテーブル[TABLE_A]の行(text) を順繰り上から引用してセレクト文の変数として使用するような関数を作成したいです。 やりたいこととしては一つ一つセレクト文を書いて出力を確認するのが無理な量な場合に作業を軽減したいです。 [TABLE_A] hogehoge_a hogehoge_b hogehoge_c ... hogehoge_xx SELECT "hogehoge_a" FROM TABLE_A; ハマってしまいなかなかうまく行きません。お願いします。

みんなの回答

  • maiko0318
  • ベストアンサー率21% (1483/6970)
回答No.1

カーソルというのを使って処理します。 http://homepage3.nifty.com/owl_h0h0/unix/job/ORACLE/oracle/pro_c.html

関連するQ&A

  • ORACLEのUPDATE処理

    お世話になります。 UPDATE文のSET句からストアドファンクションを呼び返却値を設定する処理を行っています。 が、以下のエラーが出ます。 「ORA-04091: 表xx.xxxは変更しています。トリガー/関数は見ることができません」 テーブルにトリガーは使用していません。 ストアドファンクション内で、コール側のUPDATEするTABLEを参照(SELECT)しているのですが この箇所を削除すると、エラー発生しません。 以下のような処理です。 UPDATE TABLE_A SET COL_A = FUNC(KEY1,KEY2); FUNC(PKEY1,PKEY2) IS CORSOR C1 IS SELECT COL_B FROM TABLE_A WHERE KEY1 = PKEY1 AND KEY2 = PKEY2; BEGIN ・・・ END; UPDATEですが、自TABLEのSELECTは ・SET句の中でSELECTする場合はうまくいく ・引数渡し→ストアドファンクション内でSELECTはできない という事なのでしょうか。 よろしくお願いします。

  • PostgreSQLの「*」について・・?

    こんにちわ, 今PostgreSQLを勉強しています。 たとえば, SELECT * FROM table where field ~ 'a'; とすると,tableテーブルからfieldに「a」が入っている項目を抜き出す,となります。 これに SELECT * FROM table where field LIKE '*a'; とすると,エラーが出てしまいます。 *(ワイルドカード)の使用はどのようなときに使用するのでしょうか。PostgreではLinuxとは違う使用をすると書いてあったのですが,よくわかりません。 よろしくおねがいします。

  • コマンドプロンプト 複数の実行結果を変数に

    複数のテーブルのデータ件数を取得して変数に入れ、result.txtに結果を出力したいのですが、下のように書くと、1つのテーブルのデータ件数しか出力されません。複数の結果を出力するにはどうしたらよいか教えてください。 for /f %%z in ('mysql -u root -p ^< "c:\bat\test.sql"') do set count=%%z echo result: %count% >> "c:\bat\result.txt" test.sqlの中身を、 select count(*) from table1; select count(*) from table2; select count(*) from table3; とすると何も出力されず、 select count(*) from table1; とすると、1つの結果だけ出力されます。

    • ベストアンサー
    • MySQL
  • 数値を単一引用符で囲むのはどういう意味がある?

    ちょっと疑問に思ったことがあるので質問です。 例えば以下のようなselect文があるとします。 (keyというカラムはint型です) select * from hogehoge where key = 1; これでselectは問題なく出来るのですが、以下のように値を単一引用符で囲っても、やはりselectは可能でした。 select * from hogehoge where key = '1'; カラムの型が文字列であれば単一引用符で囲まなくてはいけないですが、数値は逆に単一引用符で囲ってはいけないとばかり思っていました。 数値を単一引用符で囲むのと囲まないのとでは、何が違うのでしょうか?御存知の方、教えて下さい。

  • ORACLEでwhere句の検索順序

    Oracle9i windows2000です。 以下のようなテーブルがあります。 table_a ----------------------- id   NUMBER(10,0) NOT NULL, sort   NUMBER(10,0) NOT NULL, name   VARCHAR(10), text   VARCHAR(255) この条件で、以下のふたつのSELECT文を発行した時、パフォーマンスが良いのはどちらですか? Oracleでは後ろから検索されると聞いたことがあるのですが本当でしょうか? ※idにプライマリキー、 id,sortにインデックスが貼ってあります。 (1)SELECT text FROM table_a WHERE id = 1 AND sort = 2 AND name = 'a' (2)SELECT text FROM table_a WHERE name = 'a' AND sort = 2 AND id = 1

  • PostgreSQLでサブクエリーをJOINする方法

    たとえば、 select A.field1, B.field1 from (select field1 from table1 where field2='x') A, (select field1 from table2 where filed2='y') B where A.field2=B.field2; のようなことをしたいのですが、 Oracleだとこの方法でデータを取ってこれるのですが、PostgreSQLだとエラーで返ってきてしまいます。 PostgreSQLのバージョンは6.5.3です。 バージョンが上がると上記の書き方も通るようになるのでしょうか? また、上記の書き方と同じ意味を持つ他の書き方をご存知でしたら教えてください。よろしくお願いします。

  • MAX関数と複数問い合わせ?

    Oracle8 Release 8.0.5.0.0 - Production を使用しています。 以下のテーブル内容から、社員ごとの一番新しい日付のデータを取得したいのですがお知恵をお貸しください。 t_table ------------------------------- 社員番号     作成日付 1         2003/04/07 13:03:57 1         2003/04/05 13:03:57 2         2003/04/10 13:03:57 3         2003/03/01 13:03:57 欲しい結果 1         2003/04/07 13:03:57 2         2003/04/10 13:03:57 3         2003/03/01 13:03:57 です。 select a.社員番号, a.作成日時 from t_table a, t_table b where a.社員番号 = b.社員番号 and b.作成日時 = (select max(作成日時) from t_table) とやると、 1         2003/04/07 13:03:57 1         2003/04/05 13:03:57 だけ持ってきてしまいます。 あと、できればDB2でも使えるようなSQL文にしたいのですが・・・ これはできればでかまいません。 宜しくお願いいたします。

  • レコードのコピーについて

    PostgreSQLで質問があります。 table_Aの内容をtable_Bにコピーしたいと考えています。 create table table_B as select * from table_A; だと、table_Aのフィールドでserial型を使用しているため、 integerになってしまいます。 できれば上記以外でかつ、table_Bは既に作成されて いる状態でコピーを行いたいと考えています。 insert into table_b as select * from table_A; とかでできるんでしょうか? それとも他にいい案があるのでしょうか? 確認する環境がないのでわからないのですが、 どなたかご存知の方、お願い致します。

  • 同じテーブルでのUNION

    テーブルtableである列aのデータが1,2,3,4,5,6,7,8,9と 入っていたとします。 このテーブルを1,2,5,3,4,6,7,8,9という順番で SELECTしたい場合はどのようにすればよろしいでしょうか? select a from table where a IN (1,2) union select a from table where a = 5 union select a from table where a NOT IN (1,2,5) としてみたのですが1,2,3,4,5,6,7,8,9と表示されてしまいます。 宜しくお願いいたします。

  • 仮想?テーブルの作成方法

    こんにちわ。 質問タイトルが間違っているかもしれませんが、やりたい事は以下のようなことです。 列「商品番号」に、任意の値をセットしたテーブルを作りたい。 といっても、「CREATE TABLE文」でなく、 SELECT文(副問合せ)で作りたいのですが、 例えば、1行だけならば、 (SELECT '000001' AS 商品番号 FROM DUAL) TABLE_A のようにできると思うのですが、 これを複数行作成する方法がありますでしょうか? ご教授お願い致します。 ちなみに、Oracle10gです。