Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- CREATE TABLE spec --1
- (
- id int NOT NULL PRIMARY KEY,
- table_name varchar NOT NULL,
- column_name varchar NOT NULL,
- max_value int NOT NULL
- );
- INSERT INTO spec (id,table_name,column_name,max_value) --2
- VALUES (1,'spec','id',1);
- CREATE OR REPLACE FUNCTION get_next_value_in_column(_table_name varchar, _column_name varchar) --3
- RETURNS int AS
- $$
- DECLARE
- _max_value int;
- BEGIN
- SELECT max_value INTO _max_value
- FROM spec
- WHERE table_name = _table_name AND column_name = _column_name;
- IF _max_value IS NOT NULL THEN
- UPDATE spec
- SET max_value = _max_value+1
- WHERE table_name = _table_name AND column_name = _column_name;
- RETURN _max_value+1;
- ELSE
- -- find _max_value in table_name on column_name
- EXECUTE format('SELECT MAX(%s) FROM %s',quote_ident(_column_name),quote_ident(_table_name)) INTO _max_value;
- IF _max_value IS NULL THEN
- _max_value = 0;
- END IF;
- INSERT INTO spec(id, table_name, column_name, max_value)
- VALUES (get_next_value_in_column('spec','id'),_table_name,_column_name,_max_value+1);
- RETURN _max_value+1;
- END IF;
- END;
- $$ LANGUAGE plpgsql;
- SELECT get_next_value_in_column('spec','id'); --4
- SELECT id, table_name, column_name, max_value
- FROM spec; --5
- SELECT get_next_value_in_column('spec','id'); -- 6
- SELECT id, table_name, column_name, max_value
- FROM spec; --7
- CREATE TABLE test --8
- (
- id int NOT NULL PRIMARY KEY
- );
- INSERT INTO test(id) --9
- VALUES (10);
- SELECT get_next_value_in_column('test','id'); -- 10
- SELECT id, table_name, column_name, max_value
- FROM spec; --11
- SELECT get_next_value_in_column('test','id'); --12
- SELECT id, table_name, column_name, max_value
- FROM spec; --13
- CREATE TABLE test2 --14
- (
- num_value1 int NOT NULL,
- num_value2 int NOT NULL
- );
- SELECT get_next_value_in_column('test2','num_value1'); --15
- SELECT id, table_name, column_name, max_value --16
- FROM spec;
- SELECT get_next_value_in_column('test2','num_value1'); --17
- SELECT id, table_name, column_name, max_value
- FROM spec; --18
- SELECT get_next_value_in_column('test2','num_value2'); --20
- SELECT id, table_name, column_name, max_value
- FROM spec;--21
- SELECT get_next_value_in_column('test2','num_value1');
- SELECT get_next_value_in_column('test2','num_value1');
- SELECT get_next_value_in_column('test2','num_value1');
- SELECT get_next_value_in_column('test2','num_value1');
- SELECT get_next_value_in_column('test2','num_value1'); --22
- SELECT id, table_name, column_name, max_value
- FROM spec; --23
- DROP FUNCTION get_next_value_in_column(_table_name varchar, _column_name varchar); --24
- DROP TABLE spec; --25
- DROP TABLE test;
- DROP TABLE test2;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement