You can however write two functions. One that returns the low value and one that returns the high value. You get around the mutating table by declaring PRAGMA AUTONOMOUS_TRANSACTION; in your functions. I would not recommend doing this though. Wouln't it be better to create a table storing the minimum and maximum salaries? You could have it broken down by job categories. And Since you would be returning data from a table other than the table that you are inserting into or updating you would not have a mutating table.