【PostgreSQL】テーブル存在チェック,フィールド存在チェックなストアドプロシジャ[PL/pgSQL]
関連記事
- 【#PostgreSQL】3ヶ月ぶりぐらいにSQLを眺めているが,判らん!!モルモルモル 【2024年07月25日(木)】
- 【#PostgreSQL】太古の昔から動いているシステムのレコード,手修正作業をするなど,と 【2023年10月06日(金)】
- 【#PostgreSQL】テーブルから取得したレコードセットをCSVへ落とそうとすると,空ファイルが出来る...ドロドロドロ 【2023年03月08日(水)】
- 仕事オワタ 昼寝しよ(GRB爆 【2023年02月23日(木)】
- 【#PostgreSQL】鬼のような4本のSQLを書き上げた 【2023年01月13日(金)】
チョロっと書いてみた
ストアドレベルで書いておけば,取り回しも楽じゃろと?
ざっと調べて,ネットに事例もなかったんで載せておきまする
※SQLインジェクションな対応コードにはなってませんです
SQL文を文字列結合で組み立てる凶悪なコード(汗
バインドしても良かったけど,面倒くさくなったんでやめた(爆
ネット公開なサーバに本ストアド載せるときは,前段に必ずSQLインジェクション対応処理をおねがいしまする
今回のうちの案件は,完全ローカルなクローズドシステムなんでSQLインジェクションは関係ないもんで(GRB汗
毎度おなじみ,バグってたらスマソ(猛汗
—–
istable(テーブル名)がテーブルの存在チェック
isfield(テーブル名, フィールド名)がフィールドの存在チェック
どっちもtrueかfalseを返しまする
ex)
select istable(‘test_tbl’);
select isfield(‘test_tbl’, ‘mainkey’);
CREATE OR REPLACE FUNCTION public.istable(tblname text) RETURNS boolean AS $BODY$ DECLARE sqlstr text; cur_max refcursor; colfields record; result boolean; BEGIN -- 処理 result := false; sqlstr := 'select count(tablename) as cnt from pg_tables where tablename = ''' || tblname || ''''; --SQL定義 open cur_max for EXECUTE sqlstr; --カーソル Open loop fetch cur_max into colfields; if not found then exit; end if; if colfields.cnt > 0 then result := true; else result := false; end if; exit; end loop; close cur_max; --カーソルクローズ return result; END; $BODY$ LANGUAGE plpgsql; CREATE OR REPLACE FUNCTION public.isfield( tblname text, fieldname text) RETURNS boolean AS $BODY$ DECLARE sqlstr text; cur_max refcursor; colfields record; result boolean; BEGIN -- 処理 result := false; sqlstr := ' select count(attname) as cnt from pg_attribute where attnum > 0 and attrelid = (select relfilenode from pg_class where relname = ''' || tblname || ''') and attname = ''' || fieldname || ''''; --SQL定義 open cur_max for EXECUTE sqlstr; --カーソル Open loop fetch cur_max into colfields; if not found then exit; end if; if colfields.cnt > 0 then result := true; else result := false; end if; exit; end loop; close cur_max; --カーソルクローズ return result; END; $BODY$ LANGUAGE plpgsql;
コメント
「ジャパニーズウイスキー」の基準“法律で明確化を”業界団体
【#桜】国富:大坪の一本桜を見物に行った!咲いてなかったドロドロドロ(25/3/22)
3月下旬なのに鰐塚山が雪を被ってる.これはヤバス(25/3/19)
JR日豊線・仙巌園駅3月15日開業 周辺含む総整備費は12億円、開業合わせ磯ビーチハウスにカフェオープン
【#確定申告】税務がオワタ!所得税&消費税申告書を提出した!財務省の役人どもはこの恨み,祝ってやるドロドロドロ
【#火事】都農町のキャンプ場近くで山林火災 現在も消火活動中(27日午後6時15分現在)
宮崎ー台湾 国際定期便が週2往復に増便へ 来月30日から(25/2/15)
『にっぽん縦断 こころ旅』4月から田中美佐子が新たな旅人に 火野正平さんが14年間担当
オリックス・バファローズのキャンプ見学に行ってきた,昨日(爆(25/2/9)