1. 굳이 바인드변수 처리 하지 않아도 될 것을 바인드 변수 처리하고 있네요.
- for_pay_deduction.formular
2. 오히려 바인드 변수 처리해야 할 것을 안하고 있네요.
- for_pay_deduction.emp_code
BEGIN IF INSTR(for_pay_deduction.formular, ':') = 0 THEN v_column := for_pay_deduction.formular; ELSIF INSTR(for_pay_deduction.formular, ':v_over_work_hour') != 0 THEN v_column := NVL(v_over_work_hour , 0); ELSIF INSTR(for_pay_deduction.formular, ':v_night_work_hour') != 0 THEN v_column := NVL(v_night_work_hour, 0); END IF; v_query := 'SELECT ' || v_column || ' FROM employee e ' || ' , sal_info si ' || ' , hobong h ' || ' WHERE e.emp_code = si.emp_code ' || ' AND e.emp_code = :v_emp_code ' || ' AND e.position_code = h.position_code ' || ' AND si.hobong = h.hobong ' ; EXECUTE IMMEDIATE v_query INTO v_price USING for_pay_deduction.emp_code; END;
BEGIN v_column := for_pay_deduction.formular; v_column := REPLACE(v_column, ':v_over_work_hour' , v_over_work_hour ); v_column := REPLACE(v_column, ':v_night_work_hour', v_night_work_hour); v_query := 'SELECT NVL(' || v_column || ', 0) ' || ' FROM employee e ' || ' , sal_info si ' || ' , hobong h ' || ' WHERE e.emp_code = si.emp_code ' || ' AND e.emp_code = :v_emp_code ' || ' AND e.position_code = h.position_code ' || ' AND si.hobong = h.hobong ' ; EXECUTE IMMEDIATE v_query INTO v_price USING for_pay_deduction.emp_code; END;
문자열입니다. 입력받은 문자열을 조작하는 거죠.
-- 예를 들면 -- 입력값이 다음과 같을 때 ... v_over_work_hour := 4; for_pay_deduction.formular := '(:v_over_work_hour * h.base_sal * 1.5)'; -- 이 구문을 수행하면 ... v_column := for_pay_deduction.formular; v_column := REPLACE(v_column, ':v_over_work_hour' , v_over_work_hour ); -- 결과는 ... v_column = '(4 * h.base_sal * 1.5)'