コンテンツにスキップ

英文维基 | 中文维基 | 日文维基 | 草榴社区

ノート:PL/SQL

ページのコンテンツが他言語でサポートされていません。

読み直してみたのですが、ストアードプロシージャやデータベーストリガは項目として分けた方がいいかもしれないと思いましたがどうでしょうか?(というか、書き始めてしまうときりがないですね。初めて書いてみて痛感しました。)

あと、「PL/SQLがネイティブにサポートしない」というのはどういうことなのでしょうか? SQL*Plusユーザーズガイドで確認したのですが、SQLのCREATEコマンドを実行してストアードプロシージャを作成する場合もスラッシュまたはRUNが必要だと書いてありますが・・・。 Yuun 2004年9月13日 (月) 02:39 (UTC)[返信]

/が必要なのはSQL*Plusに対してPL/SQL構文を含む命令を発行する場合にその入力の完了(末端)を 示すためです。 無名PL/SQL、加えてストアドプロシージャとファンクションのCREATEで endの後ろに';'を つけるのはPL/SQLエンジンに対して構文の完了を示すためです。 runも同じくです。 これはSQL*PlusからPL/SQL構文を発行する場合のひとつのパターンに過ぎません。 ODBCやらJDBCやら、もしくはOCIで直接PL/SQL構文を発行するようにした場合には '/' も run も必要ありません。ですから、PL/SQLを説明するために、例外としてset serverout on については少し説明を入れましたが、SQL*Plus固有の話はここで掘り下げるつもりはありません。 最初からSQL*Plusを使わないで開発する人もいますので(SI ObjectBrowserを使う人も最近は多いですよね)、いらぬ混乱は避けたいだけです。 Bigben 2004年9月13日 (月) 10:33 (UTC)[返信]

あと、カーソルが難しいと言っている時点でこのPL/SQL全体は相当難しいものになりますから。 カットする前に意見を上げてからカットしてください。こちらに余計な手間をかけさせないで ください。Bigben 2004年9月13日 (月) 10:53 (UTC)[返信]

/はSQL*Plusを使用するときに必要なんですよね。無名PL/SQLブロックにはついていて、ストアドプログラムには付いていないというのは? 無名ブロックはSQL*Plusから使用することが多く、ストアドプログラムはそうでないことが多いから、という理由でしょうか?

/ はSQL*Plusというツールから無名・有名にかかわらずPL/SQLブロックを含むコードをDBに送信する際に必ず必要になる終端文字です。 実行するときには、短文でプロシージャ、もしくは関数として呼び出しますから、SQL*Plusからも指定する必要はないのです。そういう独自仕様なだけです。Sybase ASE や MS SQL Server でのSQL仕様であるTransact-SQLで、対話型ツール(isql,osql)を使う場合にかならず 最終行に「GO」を入れるのと大差ありません。 ODBC・JDBCやDB固有のAPIからこれらの終端文字・文字列を実行すればエラーとなるのは、その文字が特定のツールだけが解釈するものだからです。SQLの仕様そのものとは関係ありません。Bigben 2005年6月19日 (日) 11:50 (UTC)[返信]

カーソル関係のところは冒頭の段落ということもあり、カーソルやFetchループという用語をあげるよりも何ができるかということに重点を置くべきでは?という考えに基づくものです。

「余計な手間をかけさせないで」ということですので、以下、誤字脱字などの簡単な修正以外は控えます。 Yuun 2004年9月13日 (月) 18:08 (UTC)[返信]

カーソル、FETCHを解説するのになぜこの記事でなければならないのかを説明してください。 PL/SQL固有の概念ではないことは明白ですよね?Bigben 2004年9月13日 (月) 18:45 (UTC)[返信]

冒頭の段落を読んだところ(自分はC言語を多少読み書きできる程度)、DBとレコードが少し聴きなれず、カーソルとFETCHは意味不明という感じでした。googleでSQLとPL/SQLの解説サイトを探して多少理解は進みましたが。レコード、FETCH、カーソルの説明ページがあると、PL/SQLのよりしっかりした理解をWikipedia内でスムーズに得られると思います。とはいえ自分の今の理解度では書けませんが。2005年6月17日 (金) 07:18 (UTC)

SQLによるカーソル、カーソルが指し示すクエリー結果からレコードをFETCHする、ということは、PL/SQL独自の概念ではなく「標準SQL」のものです。ここまで書いたらいい加減わかりますよね。SQLのノートに意見しないでなぜここで意見しているのかが理解できないのですよ。 SQLの実装はPL/SQLが唯一ではないですからね。PL/SQLはSQLをベースに仕様拡張したOracle Databaseの内部言語にすぎません。これでは自動車に共通すること細かい概念・仕様を、特定の車種の記事にのみ記述することと同じ行為です。おかしいと思いませんか? SQLの記事がいまだに充実しないのは、初心者がこのような勘違いを起こしてしまうほどOracle が寡占状態であるという証拠でもあるのでしょうが。 実はOracleのSQLの実装は、他社のRDBMSの実装と比較して標準SQLから非互換が大きい仕様になっています。カラム型のバリエーション、トランザクション平行レベル(ISOLATION)、定義ユーザ名と同じ名前のスキーマしか定義できない(ユーザ=スキーマ、ユーザと対にならない単独のスキーマは定義できない)などなど。あなたがどのように理解しようとあなたの勝手ですが、PL/SQLがSQLの元祖ではないことを学習してください。Bigben 2005年6月19日 (日) 11:36 (UTC)[返信]