PostgreSQL 9.0.0文書
前のページ | 巻戻し |  | 早送り | 次のページ

# DO

## 名前

DO -- 無名コードブロックを実行します。

## 概要

    DO [ LANGUAGE lang_name ] code

## 説明

`DO`は無名コードブロック、言い換えると、手続き言語内の一時的な無名関数を実行します。

コードブロックはあたかもパラメータを取らずに`void`を返す関数の本体かのように扱われます。 これは解析され、一回実行されます。

省略可能な`LANGUAGE`句をコードブロックの前または後ろにつけることができます。

## パラメータ

`code`

  実行される手続き言語のコードです。 これは、`CREATE FUNCTION`の場合と同様、文字列リテラルとして指定しなければなりません。 ドル記号による引用符付けの使用を勧めます。

`lang_name`

  コードの作成に使用する手続き言語の名前です。 省略時のデフォルトは`plpgsql`です。

## 注釈

使用される手続き言語は常に、`CREATE LANGUAGE`を使用して現在のデータベースにインストールされていなければなりません。 `plpgsql`はデフォルトでインストールされますが、他の言語はインストールされません。

ユーザは手続き言語に対する`USAGE`権限を持たなければなりません。 また、言語が信用できない場合はスーパーユーザでなければなりません。 これは、その言語における関数作成に必要な権限と同じです。

## 例

`public`スキーマ内のすべてのビューに対するすべての権限を`webuser`ロールに付与します。

    DO $$DECLARE r record;
    BEGIN
        FOR r IN SELECT table_schema, table_name FROM information_schema.tables
                 WHERE table_type = 'VIEW' AND table_schema = 'public'
        LOOP
            EXECUTE 'GRANT ALL ON ' || quote_ident(r.table_schema) || '.' || quote_ident(r.table_name) || ' TO webuser';
        END LOOP;
    END$$;

## 互換性

標準SQLには`DO`文はありません。

## 関連項目

CREATE LANGUAGE

前のページ | ホーム | 次のページ
DISCARD | 上に戻る | DROP AGGREGATE