• 締切済み

PL/SQLとPL/pgSQLの違い

こんにちは。 現在の環境がOracle8iで、次のシステムがPostgreSQLで構築されることになりました。 今後に向けてPL/SQLを勉強しようと思ったのですが、PostgreSQLにはPL/pgSQLというストアドプロシージャが有ると言うことを知りました。 そこで質問なのですが、PL/SQLとPL/pgSQLは何か大きな違いは有るのでしょうか? PL/SQLの勉強をすれば、PL/pgSQLも出来るようになるのかを教えていただけますでしょうか。

みんなの回答

回答No.1

>PL/SQLの勉強をすれば、PL/pgSQLも出来るようになるのかを教えていただけます 独自仕様で実装されている中では、PL/SQLとPL/pgSQLは似ていますが、あくまで「RDBMSの独自仕様」ですから、どちらかを勉強すれば、他方もそのまま使える訳ではありません。ただ、どちらかを修得すれば、他方の修得に役立つとは思います。 <PostgreSQLのマニュアルより、PL/SQLからPL/pgSQLへの移行> http://www.postgresql.jp/document/pg800doc/html/plpgsql-porting.html <OracleとPostgreSQL間のSQL移行方法例> http://www.thinkit.co.jp/free/marugoto/2/1/22/1.html

Koko-Doko
質問者

お礼

なるほど、独自仕様があるのですね。 PL/pgSQLを勉強しようと思ったのですが、初心者向けの本が無さそうなので、まずはPL/SQLの本で勉強して、独自仕様の部分は順次慣れていこうと思います。 回答ありがとうございました。

関連するQ&A

  • PL/pgSQLの直接実行

    PL/pgSQLのことで教えてください。 これまで SQL Server を使っていましたが、PostgreSQL に移行しています。 Npgsql で、VB.Net から接続しようと思っています。 PL/pgSQLで、ストアドファンクションなどを定義するのではなく、PL/pgSQLスクリプトを 直接実行することはできないのでしょうか? SQL Server では、T-SQLのスクリプトを直接実行できました。 例えば ManagementStudioのクエリ実行画面にスクリプトを入力して実行したり、 VBからだと、SqlCommand の CommandText に T-SQLを書いて実行したり、という ことです。 pgAdminIIIのSQLエディタや、NpgsqlのNpgsqlCommandで同様のことをやろうとすると エラーになります。 何か良い方法があるのでしょうか?

  • SQLとPL/SQLの違いなど

    いま会社でPL/SQLのシステムを構築する話が持ち上がっているのですが SQLとPL/SQLでどのような違いがあるのかがいまいち分かりません。 あと、PL/SQLの開発システムを導入しようとするときに どのようなソフトを入れればよいのかも、よく分かっていない始末です。 単純な質問なのかもしれませんが、わかる方よろしくお願いします。

  • PL/SQLについて

    PL/SQLについて お世話になります。 現在Oracle 11gと.Net C#で開発をしている物です。 正直どちらも初心者で悪戦苦闘している日々ですが、 PL/SQLのカーソルについて知りたい事があります。 PL/SQLでカーソルを作成しました。 そしてその同一ストアドプロシージャ文の中で、 先のカーソルの結果で得られた値から別の新たなカーソル でまた新たな結果を返すと言う様な、二重カーソルの様な 事は可能でしょうか。 どなたかご親切な方、ご教授頂きたく宜しくお願い致します。 出来れば、サンプルや、HP等ご紹介頂ければありがたく 思います。

  • PL/SQLに関して

    PL/SQLに関しての質問です。 1、プロシージャの内部にファンクションをネストするなどということはできるのでしょうか? (内部ファンクションのような感じで) 2、プロシージャからファンクションを呼び出し、ファンクションの戻り値をレコード型変数にした場合、ファンクションでSELECTしたレコード件数が0件であった場合、例外ブロックのWHEN no_data・・・THEN で、RETURN NULLで戻すことはできるでしょうか? (呼び出し側で、レコード型変数にNULLを代入できますか?) 3、ObjectBrowserからストアドプロシージャを実行するとき、引数ありのストアドプロシージャを実行する方法を教えてください。(または参考WEBサイトを教えてください。) いずれも、試す環境が今ないため、ご回答のほどよろしくお願いします。

  • PL/pgSQL 引数の数

    PL/pgSQL を使用し更新処理を行いたいのですが、 パラメータの数が多すぎるのか 以下のエラーでデータベースにファンクションを定義出来ません。 ERROR: functions cannot have more than 100 arguments SQLステート:54023 可変長引数で作成すると、データベースに定義は出来るのですが ファンクション実行時に同様のエラーが発生し更新処理が行えません。 PL/pgSQL の引数を100以上使用出来る様にする設定等、存在するのであれば 教えて頂きたいです。 環境は以下の内容です。 CentOS-6.2-x86_64 Apache/2.2.15 PostgreSQL 9.1.3 PHP Version 5.3.3 (PDOを使用しています)

  • [Oracle]と [PL/SQL]の違い

    [Oracle]と [PL/SQL]の違いを コンピュータの知識がまったくない人に教えたいのですが、 どうすればよいですか。

  • C-ShellでPL/SQLを実行する記述について

    お世話になります。 C-ShellでPL/SQLプロシージャの実行を行いたいのですが、 引数でプロシージャ名を渡してそれを実行するようにしたいです。 C-Shellでどのように記述すれば良いでしょうか? PL/SQLプロシージャでは、1つのINパラメータ、4つのOUTパラメータを使用しています。 (複数のプロシージャでパラメータは共通の作りにしています。) C-Shellでプロシージャの処理結果をチェックし、エラーの場合ログファイルに エラーコードとメッセージを出力したいです。 OSはSolaris、データベースはOracle 11gです。 勉強中ですので、質問内容に不備な点あるかと思いますが、 よろしくお願い致します。

  • PL/SQLのエラーについて

    こんばんは。PL/SQLのエラーについて質問させて頂きます。 現在、Oracle8.1.7のデータベースを使用したオラクルのE-business Suiteという人事系システムで開発をしています。 そこで、SQL*Plusを使用してPL/SQLのパッケージをコンパイルしたところ、パッケージ仕様部も本体部もコンパイルのエラーは出なかったのですが、E-business SuiteにPL/SQLを設定し、動作させようとしたら、下記のようなエラーが発生しました。 -------------------------------------------------------------------- FDPSTP 内のOracleエラー 6550 原因: ORA-06550: 行 1、列 7: PLS-00221: 'ZT_TYOUHYOU_HENSEI_PKG'がプロシージャではないか、または未定義です。 ORA-06550: 行 1、列 7: PL/SQL: Statement ignored が原因で FDPSTP に失敗しました。 --------------------------------------------------------------------- また、作成したPL/SQLパッケージの仕様部は下記のとおりです。 -------------------------------------------------------------------- CREATE OR REPLACE PACKAGE APPS.ZT_TYOUHYOU_HENSEI_PKG AS FUNCTION get_henseihyo_kbn (i_grade IN VARCHAR2,o_hensei_kbn OUT VARCHAR2) RETURN NUMBER; <・・・・・中間部分は省略・・・・・> PROCEDURE main_shori (p_process_date IN VARCHAR2, p_location IN VARCHAR2); END ZT_TYOUHYOU_HENSEI_PKG; -------------------------------------------------------------------- 原因だと思われる心当たりの部分も探してみたのですが、このエラーの意味は何なのか、原因はどこにあるのか分かりません。 どなたかお判りの方、御回答よろしくお願い致します。

  • PL/SQLで実行したSQLのログの取得について

    ASP(ActiveServerPage)より、PL/SQLのFunctionを実行し、Oracleの複数のTABLEを更新しようとしています。 ASPから実行する際には、引数を渡し、その引数をSQL実行の条件としていますが、実際に実行されたSQL文のログを取得したいのですが、どうしたらよいでしょうか? 何か良い方法をお教えいただけますよう、よろしくお願いいたします。 [実行環境] DB:Oracle8i

  • PL/SQLの文法

    oracle8,windows95を使用しています。 PL/SQLで、シーケンスを削除して再度作成するという処理を書きたいのですが、PL/SQLはまったくの素人のためアドバイスをいただけたら、と思います。 実行したいのは、以下のSQL文です。 1) SQL>DROP SEQUENCE SQC_TEST 2) SQL>CREATE SEQUENCE SQC_TEST INCREMENT BY 1 START WITH 1 MAXVALUE 9999 MINVALUE 1 CYCLE; これを、PL/SQLで実行するにはどうかけばよいでしょうか? CREATE OR REPLACE PROCEDURE HC_CREATE_SEQ BEGIN DROP SEQUENCE SEQ_車両申請 FROM DUAL; CREATE SEQUENCE SQC_TEST INCREMENT BY 1 START WITH 1 MAXVALUE 9999 MINVALUE 1 CYCLE; END; / と書いてみましたがコンパイルに失敗しましたとおこられてしまいます。 ヒントだけでもいただけたら、と思います。 よろしくお願いいたします。