スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PL/pgSQLでテーブルのカラムで唯一のランダム文字列を作成する

以前ランダム文字列を作成するPL/pgSQLの関数を紹介しました。
これを使って(ちょっとだけ関数名を変えています)、テーブルに存在しないユニークな値をとってきます。
-- テーブルで一意の値を生成する
-- 引数
-- p_table_name : テーブル名
-- p_column_name : カラム名
-- p_try_count : 試行回数
-- p_length : 長さ
-- p_length : 生成する文字列の長さ
-- p_source : 生成する文字列の要素
-- 戻り値
-- ランダムな文字列
CREATE OR REPLACE FUNCTION dyn_random_string(
p_table_name TEXT
,p_column_name TEXT
,p_try_count INT DEFAULT 10
,p_length INT DEFAULT 10
,p_source TEXT DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
) RETURNS TEXT AS $$
DECLARE
w_target TEXT;
w_value TEXT;
BEGIN
FOR i IN 1..p_try_count LOOP
w_value := NULL;
w_target := uv_string_random(p_length, p_source);
EXECUTE
'SELECT ' || p_column_name ||' FROM ' || p_table_name ||
' WHERE ' || p_column_name || ' = $1'
INTO
w_value
USING
w_target
;
IF w_value IS NULL THEN
RETURN w_target;
END IF;
END LOOP;
RETURN NULL;
END;
$$ LANGUAGE plpgsql;
スポンサーサイト

COMMENTS

COMMENT FORM

TRACKBACK


この記事にトラックバックする(FC2ブログユーザー)

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。