• ベストアンサー

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

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

  • mr-r00
  • お礼率93% (480/516)
  • Oracle
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.1

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

mr-r00
質問者

お礼

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

その他の回答 (1)

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

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

mr-r00
質問者

お礼

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

関連するQ&A

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

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

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

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

  • 件数をカウントして日付でソートするSQL

    こんなテーブルがあったとして、 テーブル名:shohin ------------------- type:文字列 create_date:日付 こんなデータになっていたとして type| create_date ----+----------- abc | 2004/02/01 abc | 2004/02/02 abc | 2004/02/03 hhh | 2004/01/30 xxx | 2004/01/12 xxx | 2004/01/13 xxx | 2004/01/14 xxx | 2004/01/15 xyz | 2004/01/01 xyz | 2004/01/05 このようなデータを出力したいのですが… (typeで集計して、create_dateの一番新しい日付でソート) type | count | create_date -----+-------+----------- abc | 3 | 2004/02/04 -----+-------+----------- hhh | 1 | 2004/01/30 -----+-------+----------- xxx | 4 | 2004/01/15 -----+-------+----------- xyz | 2 | 2004/01/05 これを一発で書くSQLって可能でしょうか? 副問い合わせを使えば出来るような気がするのですが、Group By した結果からさらに最新の日付を取得してソートというのがどうも上手く書けませんでした。 お分りになる方がいらっしゃいましたら、ぜひともご教示願います。

  • ユーザー名にアンダーバーを含む場合のデータベース作成について

    ユーザー名にアンダーバーを含む場合のデータベース作成について mysql > create database demo_demo; mysql > grant all on demo_demo.* to demo_demo@localhost 上記のSQL を発行した場合、「demo_demo」というデータベースと、ローカルから「demo_demo」データベースにALL の権限の範囲内でアクセスできる「demo_demo」というユーザーが作成されると思います。ここで2点教えてください。 質問1: ALL権限には「create database」を許可するCREATE権限が含まれますが、上記「demo_demo.* 」のように、grant 時に特定のデータベースに対してのみALL権限を与えた場合の「create database」を許可するCREATE権限とはどういう意味を持つのでしょうか? 質問2: mysql > create database `demotdemo`; など、ユーザー名のアンダーバー部分に任意文字を当てたデータベースが無限に作成できてしまいます。アンダーバーがSQL的に「任意の一文字」に相当するとは理解していますが、「demotdemo」などのデータベースが作成できてしまうのはmysql の仕様でしょうか?また、ユーザーが「create database」可能かでないかの判定はどの権限で制御されているのでしょうか? 参考資料でもよいので教えてください。お願いします。

    • ベストアンサー
    • MySQL
  • 関数の使い方

    お世話になります。 関数の使い方が、イマイチ良くわからないので質問させていただきます。 下記の様な記述でデータベースから情報を取り出しています。今回は、コレが一つのファイル内で複数回出現するので関数にしたいです。 現状では、関数を呼び出したときにエラーが出力されます。 ----------------------------------------- $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
  • すでにあるsqlファイルを使用して、データベースを作成する方法

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

  • Laravelの解説がよくわからないです。

    http://ysktec.com/shiguregaki/blog/?p=1163 の.envの変更の部分 がよくわからないのですが、 DB_DATABASE=<事前準備で作成したデータベース名> など三つのdbを作る部分は恐らくsqlを使ってDBをいじるという事でしょうが、 この記述をenvファイル内に記載してこのファイルを実行してテーブルなどを作るという事でしょうか? phpmyadminで作っても結局同じなのでしょうか? とても良いサイトなのですが このサイトの説明がいまいちわかりません。 DB_DATABASE=<事前準備で作成したデータベース名> これはどこに記載するのですか下記のマイグレーションファイル内ではないですよね? Schema::create('users', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->string('email')->unique(); $table->string('password'); $table->rememberToken(); $table->timestamps();

  • VBでSQLサーバーへ接続できない

    WVD2008ではSQLサーバーへ接続できて、データも表示できるのに、 VB2008からは最初の設定画面がわかりません。 添付の図は 右:WVD 左:VB です。 WVDは データソース:Microsoft SQL Server (SqlClient) サーバー名:○○○\SQLEXPRESS データベース名:master と入力しテスト接続すると「成功」します。 しかしVBは データソース:Microsoft SQL Server Compact 3.5 データベースファイル名:○○○\SQLEXPRESS もしくは データソース:Microsoft SQL Server データベース ファイル (SqlClient) データベース:○○○\SQLEXPRESS と入力しテスト接続すると「見つかりません」となります。 アクセスへなら データソース:Microsoft Access データベース ファイル (OLE DB) データベースファイル名:C:\\Desktop\Documents\○○○.mdb として接続できます。 接続できないというよりもVBにおいてのSQLサーバーへの設定方法がわかりません。 VBにて サーバー名:○○○\SQLEXPRESS データベース名:master へ接続したい場合はどうすればいいでしょうか? ご教授よろしくお願い致します。

  • 日付の最大値レコードを取得する方法について

    お世話になります。 SQLで日付の最大値を取得する方法です。 テーブルのデータ内容は以下のようになっています。 | 社員番号 | 社員名 | 日付 | 順序 | +---------+-------+-----------+-----+ | 100 | AAA | 2011/05/01 | 2 |   ← このレコードを取得したい +---------+-------+-----------+-----+ | 100 | AAA | 2011/05/01 | 1 | +---------+-------+-----------+-----+ | 100 | AAA | 2011/04/01 | 1 | +---------+-------+-----------+-----+ | 200 | BBB | 2011/04/01 | 2 |   ← このレコードを取得したい +---------+-------+-----------+-----+ | 200 | BBB | 2011/04/01 | 1 | +---------+-------+-----------+-----+ 取得したいレコードは、 社員ごとの最大日付の最大順序をもつレコードです。 (上記の1行目と4行目のレコードを取得したい) この場合、 下記のようなSQLを考えます。 --------------------------------- SELECT 社員番号, 社員名, 日付 FROM テーブル名 WHERE 社員番号 = 'xxx' AND 日付 = (SELECT MAX(日付) FROM テーブル名 ) AND 順序 = (SELECT MAX(順序) FROM テーブル名 ) ---------------------------------- 但し、上記の場合、 社員ごとに最大値レコードが取得できません。 どなたかレコード取得方法について 教えていただけないでしょうか? よろしくお願いいたします。

  • SQLサーバのデータベース名表示について

    SQLサーバ初心者です。 わからないことがあり、ご存知の方いらっしゃいましたらご教示ください。 SQLサーバ2008 を使用しています。 SQLサーバのデータベース名の一覧を取得する方法として、 sys.databasesをselectしたり、sp_databasesを使用してDB名を取得できることは確認できたのですが、 master/msdbなどのシステムデータベース以外の自分で作成したユーザーデータベースのみリストする方法があればご教示いただけないでしょうか?