[pgsql-jp: 28678] Re: はじめまして

Hashimoto, Masaru hashimoto-m @ comtecc.net
2003年 1月 15日 (水) 10:15:54 JST


はじめまして、橋本です。
いつも質問ばかりですが、私にも分かりそうだったので・・・

トリガは使ったことが無いので分かりませんが、
PL/PGSQLの構文からですと、

> table_name:="BBS.BBS02"||new.CACODE;

等の文字列を扱う場合は''(シングルクォーテーション二つ)で囲みます。
ですので、上の行は

table_name:=''BBS.BBS02''||new.CACODE;

となるかと思うんですが・・・

> new. のあたりかなとは思ってはいるんですが・・・

トリガでは、new. という表記が出来るのですか?
通常の関数だと、このnewはRECORDやROWTYPEといった
複合型変数で宣言する必要があります。


・・・うーん、こういう書き方でちゃんと回答できてますかね?

> sqlはこんな感じです。
> --------------------------------------------------------------------------------
> /*------------------------------------------------------------*
>  * CREATEBBS02
>  *
>  * MABBS01(カテゴリマスター)にカテゴリが追加されたら
>  * 対応するテーブルを作成する。
>  *
>  *------------------------------------------------------------*/
> CREATE FUNCTION CREATEBBS02() RETURNS OPAQUE AS '
> DECLARE
>     table_name CHAR(12);
>     a_output VARCHAR(4000);
> BEGIN
> 
> table_name:="BBS.BBS02"||new.CACODE;
> 
> a_output:="CREATE TABLE "||table_name||"(
> 			NWCODE	CHAR(8) NOT NULL,
> 			NWTITL	VARCHAR(64) NOT NULL,
> 			NWPBCD	CHAR(6) NOT NULL,
> 			NWTEXT	TEXT NOT NULL,
> 			NWVWFL	CHAR(1) NOT NULL,
> 			NWPSWD	VARCHAR(8) NOT NULL,
> 			NWPATH	VARCHAR(32) NOT NULL,
> 			NWUPDT  TIMESTAMP,
> 			NWINDT  TIMESTAMP NOT NULL,
> 			CONSTRAINT P_"||table_name||" PRIMARY KEY(NWCODE),
> 			CONSTRAINT F_"||table_name||" FOREIGN KEY(NWPBCD) REFERENCES MASANEI03(SYCODE) MATCH FULL
> );
> COMMENT ON TABLE BBS."||table_name||" IS ""掲示板"""||table_name||";
> COMMENT ON COLUMN BBS."||table_name||".NWCODE IS ""記事コード"";
> COMMENT ON COLUMN BBS."||table_name||".NWTITL IS ""記事タイトル"";
> COMMENT ON COLUMN BBS."||table_name||".NWPBCD IS ""掲載者コード"";
> COMMENT ON COLUMN BBS."||table_name||".NWTEXT IS ""本文"";
> COMMENT ON COLUMN BBS."||table_name||".NWVWFL IS ""表示フラグ"";
> COMMENT ON COLUMN BBS."||table_name||".NWPSWD IS ""パスワード"";
> COMMENT ON COLUMN BBS."||table_name||".NWPATH IS ""ファイル名"";
> COMMENT ON COLUMN BBS."||table_name||".NWUPDT IS ""更新日"";
> COMMENT ON COLUMN BBS."||table_name||".NWINDT IS ""作成日"";";
> 
> EXECUTE a_output;
> END;
> ' LANGUAGE 'plpgsql';
> 
> CREATE TRIGGER CREATEBBS02 AFTER INSERT ON MABBS01
>     FOR EACH ROW EXECUTE PROCEDURE CREATEBBS02();
> --------------------------------------------------------------------------------




pgsql-jp メーリングリストの案内