I am getting an issue where when I try to reference the parameters directly by name I am getting back the literal values after the function gets called. Can anyone help me out with how I can use the parameter values here?
CREATE OR REPLACE FUNCTION dbo.reset_sequence(
tablename text,
columnname text,
sequence_name text)
RETURNS void AS
$BODY$
DECLARE
BEGIN
IF( (SELECT MAX( columnname ) ) < (SELECT min_value FROM dbo.tablename) )
THEN
-- EXECUTE 'SELECT setval( ' || sequence_name || ', (SELECT min_value FROM dbo.' || sequence_name ||')';
ELSE
-- EXECUTE 'SELECT setval( ' || sequence_name || ', ' || '(SELECT MAX("' || columnname || '") FROM dbo."' || tablename || '")' || '+1)';
END IF;
END;
$BODY$
LANGUAGE plpgsql VOLATILE;
EDIT: The issue I am having is more specifically related to the syntax outside the EXECUTE
commands. The other solution doesn't really help me there.
After researching another topic I am trying another solution but am still getting issues.
CREATE OR REPLACE FUNCTION dbo.reset_sequence(
tablename text,
columnname text,
sequence_name text)
RETURNS void AS
$BODY$
DECLARE
_maxVal int;
_minVal int;
BEGIN
EXECUTE format('SELECT MAX( ''' || columnname || ''' ) FROM ' || schema_name || '."' || tablename || '"')
INTO _maxVal;
EXECUTE format('SELECT min_value FROM ' || schema_name || '."' || sequence_name || ''' ')
INTO _minVal;
IF( maxVal < _minVal)
THEN
-- EXECUTE 'SELECT setval( ' || sequence_name || ', (SELECT min_value FROM dbo.' || sequence_name ||')';
ELSE
-- EXECUTE 'SELECT setval( ' || sequence_name || ', ' || '(SELECT MAX("' || columnname || '") FROM dbo."' || tablename || '")' || '+1)';
END IF;
END;
$BODY$
LANGUAGE plpgsql VOLATILE;
The syntax on this works, however when I call the function I get an error where it can't store the EXECUTE
statements as integers, it seems to be returning the name of the column, not the max value in that column.