• ベストアンサー
  • すぐに回答を!

「BEGIN」などの使い方について

データベースで「BEGIN」、「CREATE_FUNCTION」おかあると思いますが何ができるのでしょうか? SQLファイルとかに記述するような感じですか? 例えば上記のものを使ってシステム日付を取得してSQLを発行して得たデータのファイル名に日付を持たすなんていうこともできますでしょうか?

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数165
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.1

「BEGIN」はPL/SQLブロックを記述する際の処理の始まりを表すキーワードです。 このキーワードでなにかが出来るということではありません。 Oracleでは「CREATE_FUNCTION」ではなく「CREATE FUNCTION」ですね。 (他のデータベースではそう記述するものがあるのかもしれませんが) これはストアドファンクションを作成する際のキーワードです。 他にもストアドプロシージャがあります。 ファンクションは単一の戻り値があり、プロシージャは戻り値がないという違いがあります。 また、ファンクションやプロシージャをまとめたパッケージというものもあります。 あらかじめデータベースに複数の処理を記述したファンクションなりを保存しておくことで、 クライアントからSQLを何回も発行する必要がなくなりパフォーマンスが上がるなどの利点があります。 SQLファイルに記述してもいいですし、SQL*Plusなどで直接コードを記述することもできます。 >例えば上記のものを使って・・・できますでしょうか? できます。 簡単なことしか書けませんが、「ストアドファンクション」や「ストアドプロシージャ」などで 検索すると参考になるページが沢山あると思いますので、そちらを見てみてください。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ありがとうございます 大変参考になりました

関連するQ&A

  • ストアドプロシージャのbegin、end

    下記の様なストアドプロシージャを作成し、VB側から実行させています。 どうしても、★SQL文2★の後のreturn文を実行してくれません。 (VB側ではreturn値が0と判断します。) このreturn文を★SQL文2★の前に移動すると、return値が-1として正常に取得できます。 begin、endのブロックの記述に何か間違いがあるのでしょうか? 環境:sqlserver2000,windows2000,vb6 よろしくお願いします。 CREATE PROCEDURE [sp_AAA] @PARAM1 varchar(16) AS begin if (~) begin ★SQL文1★ if (@@ERROR <> 0) begin return @@ERROR end end ★SQL文2★ return -1 ←ココ end

  • 毎日DBのデータをCSVに抽出したい

    タスクスケジューラで定期的に「SQL」を発行させてデータをCSVファイルにはきだしたいと思っています。 対象のdbがOracle、DB2、MySQLです。 悩んでいることが2か所あります。 抽出条件のSQLはSQLファイルに書いて簡単に実現できるのですが、 ・毎日CSVを作るためファイル名に日付を入れたい ・抽出条件に特定の日付を入れたいのですが対象のテーブルでは日付を日付型でもっておらず文字列です 例:20110206 どのようにすればいいでしょうか? ひとつのSQLファイル内で実現は不可能でしょうか?

  • SQL 関数ループでデータ取得

    SQL 関数ループでデータ取得 オラクルSQLで、FUNCTIONを作成し、その結果データを取得するSQLを作っています。(下記参照) begin buffer := null; for i IN 1..5 LOOP buffer := 【関数A(i)】; END LOOP; return buffer; イメージとしては、シーケンス番号(i)によって異なるデータを1つずつ取得したいのですが、 上記のようにすると、1回のループ毎にbufferが書き換えられ、結局最後のデータしか取得できません。 END LOOP前にreturnをはさんでしまうとその時点で関数が終了してしまうので逆に、最初のデータ しか取得できませんし。 上記のような関数を使う理由は、上記のiを固定(下記で言うi IN 1..5)でなく、 データの個数を可変で取得する仕様を考えているからです。具体的にはMAX関数でシーケンス番号の最大値を用意し、そのデータの個数取得できるようなものを考えています。 固定ならば、下記のようにその個数分関数を記述すればいいですので 【関数A(1)】; 【関数A(2)】; : 【関数A(5)】; 記述を1行で個数分のデータを取得できる方法はないでしょうか? SQLに詳しい方、ぜひご教授ください。

その他の回答 (1)

  • 回答No.2
  • 3rd_001
  • ベストアンサー率66% (115/174)

>例えば上記のものを使ってシステム日付を取得してSQLを発行して得た >データのファイル名に日付を持たすなんていうこともできますでしょうか? 可能ですが、言語やツールに依存するので可能としか言いようがありません。 もう少し目的や制限(言語やツール)を教えてもらわないと【可能です】という 回答になってしまいます。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ありがとうございます 大変参考になりました

関連するQ&A

  • 関数の使い方

    お世話になります。 関数の使い方が、イマイチ良くわからないので質問させていただきます。 下記の様な記述でデータベースから情報を取り出しています。今回は、コレが一つのファイル内で複数回出現するので関数にしたいです。 現状では、関数を呼び出したときにエラーが出力されます。 ----------------------------------------- $sql = "SELECT * FROM area"; $res = $mdb2->query($sql); while ($data = $res->fetchRow() ){ $area[] = $data; } ----------------------------------------- 下記の様な記述では、ダメなのでしょうか?宜しくお願いします。 function areaDB() {  $sql = "SELECT * FROM area";  $res = $mdb2->query($sql);  while ($data = $res->fetchRow() ){   $area[] = $data;  } }

    • 締切済み
    • PHP
  • MSSQLサーバーから移行

    お世話になっております。 MS-SQLServer2008からMySQL5.1への移植を行っています。 MYSQLの知識がまったくなく、調べながら行っているのですが、 TriggerがどうしてもCreateでエラーになってしまいます。 CREATE TRIGGER tgrMデータ AFTER UPDATE ON M_データ FOR EACH ROW BEGIN UPDATE M_データ SET `DATA切替日` = now(), `使用区分` = 'Regular' where (`使用区分` <> 'Trial' or `使用区分` is null) and `DATA切替日` is null and `ステータス` = '1'; END; phpMyAdminというツールのSQLをデータベースに対し 発行するSQLの箇所で上記を実行しています。 エラー内容がよく理解できず、何がおかしいのか まったくわかりません。 お忙しい中とは存じますが、ご教授願えませんでしょうか。

  • ストアドファンクションを差し替えたい

    VIEW は、CREATE OR REPLACE VIEW のようにして差し替えることができますが、 ストアドファンクションは、このような差し替えには対応していないのでしょうか? 本番稼動しているデータベースのストアドファンクションを差し替えたい場合は、 BEGIN DROP FUNCTION CREATE FUNCTION COMMIT とすればよろしいでしょうか?

  • 3層構造アーキテクチャ

    プレゼンテーション層、ファンクション層、データベース層と機能を分けて開発したときについてです。 (1)クライアントからAPサーバを介してSQLを発行する方式の場合、SQLを発行しているクラスはデータベース層に含まれるか?ファンクション層に含まれるか? (2)クライアントからSQLを発行する方式の場合、SQLを発行しているクラスはデータベース層に含まれるか?ファンクション層に含まれるか? (2)画面からローカルのcsvファイルを読み込む際、 データを保持しておくクラスや、そのメンバーのgetter/setterを実行するクラスはデータベース層に含まれるか? どこまでをデータベース層として呼んでいますか? ※開発チーム内の文化に依るとは思いますが、 一般的にはどうなのでしょうか? .

  • 引数で入力された月の翌月を算出する(Bシェル)

    実現したいことはC言語で記述したプログラムにて「AA_201012.txt」というファイルを出力した後に、Bシェル上でmvコマンドでリネームすることです。 上記の「201012」は年月なのですが、システム日付(date)から取得したものではなく、パラメーターとして入力されてくる「201011」の翌月をC言語で記述したプログラム上で求めたものであるため、「201011の翌月」をBシェル上で求める方法がわかりません。 C言語で出力する時の201012はシステム日付ではなくパラメーターの日付を出力していて、処理を流す日付に左右されず、パラメーターの201012をファイル名として使用するという制約があります。 ある環境ではそのままの名前でファイルを出力し、ある環境ではリネームしたいが、プログラムは変えたくないため、Bシェルでなんとかしたいです。 プログラムに不慣れなため、ご教授お願いします。

  • すでにあるsqlファイルを使用して、データベースを作成する方法

    すでにあるsqlファイルを使用して、データベースを作成する方法 もらったシステム(html,php,sqlで構成されるシステム)を自分の環境で動かそうとしているのですが、データベースを作成できないため、先に進むことが出来ず困っています。 もらったシステムには、テーブルのsqlファイルや、そのテーブルに入れるデータのsqlファイルがありました。 わかりにくい文章ですいません。 どなたかご存じの方、ご教授お願いいたします。 OS: CentOS5.3 postgresql8.1.18 apache2.2.3 php5.1.6

  • PHPからMySQLのデータベースが作成できない

    PHP:4.4.4 MySQL:4.1.21 です。 PHPからデータベースを作りたいのですがうまくいきません。 以下のように記述しています。 $sql = "CREATE DATABASE ".$DBNAME; $rst = mysql_query($sql,$con); $DBNAMEには作りたいデータベースの名前が入っています。また、$conにはIDが入っており接続はできているようです。しかしこの後で$rstをechoするとTRUEでもFALSEでもなく、何も入っていない状態です。 これはどうすればデータベースをcreateできるのでしょうか? 非推奨のようですがmysql_create_dbを使ってたところ画面が真っ白になってしまいました。

    • 締切済み
    • PHP
  • Delphi のTComboBoxについて

    DelphiのTComboBoxについて質問があります。 SQLを走らせて検索結果をTComboBoxに格納しようと考えています。 例えばTComboBoxのNameをTCMBとしたとして -------------------------------- SQL発行 while 検索データEOF do begin TCMB.add(検索結果); 次のデータ見る(Fetch); end; -------------------------------- と上記のようになります。 しかし検索結果が同じデータがあった場合もTComboBoxに格納してしまいます。 TComboBoxには重複データを格納したくありません。 そこでいい方法というかTComboBoxの特徴(プロパティやらメソッドやら)あります でしょうか? ちなみにSQLはDISTINCTなどは使えず常に同じものを取得するようになっています。

  • 1個のSQL分で2種類以上の件数値を取得する

    SQL分の記述で質問なんですが、 データベース上に日付、時間、フラグと言う項目があります。 同一の日付、時間のものは数件ずつあります。 フラグは"b"と"1"があります。 このデータの日付・時間辺りの件数と+フラグが"1"の件数を同時に取得するSQL分はかけますでしょうか? 別々ならば、 SELECT DATE,TIME,COUNT(*) AS KENSU1 FROM W_TABLE GROUP BY DATE,TIME ORDER BY DATE,TIME と SELECT DATE,TIME,COUNT(*) AS KENSU2 FROM W_TABLE WHERE FLG="1" GROUP BY DATE,TIME ORDER BY DATE,TIME でかけると思うのですが、 1個のSQL分で記述は可能でしょうか? 処理結果を 05/02/23 12:00 10 5 05/02/24 10:00 12 3 (日付・時間・件数・フラグ="1"の件数  見たいに取得したいのですが..

  • ResultSetインターフェイスでの next() の使い方

    データベースからSQLをつかって受注件数を取得したい時に、なぜ、下記のように next() をしなければいけないのかが分かりません。 初心者なので、出来ましたら詳しく教えてください。 お願いします。 int count = 0 ; Statement stmt = con.createStatement() ; String sql = "select count(*) from 受注" ; ResultSet res = stmt.executeQuery(sql) ; if (res.next()) { count = res.getInt(1) ; }

    • ベストアンサー
    • Java