emp_id が 1 のレコードを元に emp_id が 2 のレコードを追加する場合のこと。

普通はこう?

INSERT INTO employee (emp_id, col_a, col_b, col_c)
(
    SELECT 2, col_a, col_b, col_c FROM employee WHERE emp_id = 1
)

ちょっとひねったらこうなった。

BEGIN;

CREATE TEMPORARY TABLE my_temp AS
    (SELECT * FROM employee WHERE emp_id = 1);

UPDATE my_temp SET emp_id = 2;

INSERT into employee
    (SELECT * FROM my_temp);

COMMIT;

何でひねったかというと他のカラムを記述するのが大変だったから。
ひねった事によって発行クエリは増えているが、汎用性は高まったと思う。

一時テーブルの扱い方がDBによって違うかもしれないので
とりあえずPostgreSQL。

ただ、これは恥ずかしいくらい当たり前の手法かもしれないし、とんでもなく
斜め上に進んでるのかもしれない。よくある出来事だと、、思うので。