Q:

Chance of duplicate on single select max into statement

Against my will, I am told to use the following method to generate a new pk value.
INSERT  
    INTO
        SERVER_MONITERING(SM_SEQ, CPU_USE, MEMORY_BASE, MEMORY_USE, DISK_BASE, DISK_USE, SERVER_IP, SERVER_NAME, OBSTACLE_YN, CHECK_TIME)
    VALUES((SELECT MAX(SM_SEQ)+1 FROM SERVER_MONITERING), #cpuStat.combinedUsed#, #memStat.total#, #memStat.used#, #diskStat.size#, #diskStat.used#, #serverIP#, 'KW', 'N', TO_CHAR(SYSDATE, 'YYYYMMDDHH24MI'))

I told him it still looks like there could be duplicate SM_SEQ values.  
However, I don't know for sure whether this approach will eliminate duplication or not.  

Will the approach above eliminate the chance of duplicate values ?
Is this a good practice ?
Will a sequence.nextval eliminate the chance of duplicate values ?
What is the best practice ? 

Edit
Sorry, I forgot to mention.
There are multiple devs and their own code that inserts into this table and they all use select max()+1. I am a "guest" dev at this company. So I have little influence on their decision. If I switch to using a sequence only by myself, other devs will still select max()+1 and there will be collision between the two approaches.
Probably, I would have to tell all of them why even nesting a select max()+1 won't solve their problem, if it truly would not.

A:

Assuming that you allow multiple users in your application, max()+1 will guarantee that you will get duplicate values.  Therefore, it is a bad practice.  It's also less efficient but that is a lesser concern.  If you have two sessions, session 1 gets the max() + 1, and session 2 tries to get the max() + 1 before session 1 commits (or rolls back), session 2 will get the same value that was given to session 1.
Using a sequence will eliminate the possibility of duplicates.  Use a sequence.

