Dynamic SQL과 Static SQL
- Dynamic SQL : 실행시점 SQL생성
- Static SQL : compile시점에 SQL생성(개발할때 만드는 SQL)
- 관리자 입장에서 Static SQL을 선호함.
- 성능적인 부분을 예측할 수 있기 때문
- 보안적 측면도 좋음 (SQL Injection이 거의 불가능함.
1. Dynamic SQL
- DDL계열의 CREATE TABLE 사용시 에러발생
BEGIN
CREATE TABLE BY_DYNAMIC(X DATE) -- DDL 계열의 명령어 사용시 에러발생.
END;
/
- PL/SQL 블록 내에서 DDL, DCL 등의 계열을 동적으로만 사용할 수 있음
DECLARE
V_SQL VARCHAR2(2000);
BEGIN
BEGIN
V_SQL := 'DROP TABLE BY_DYNAMIC';
EXECUTE IMMEDIATE V_SQL;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('DYNAMIC SQL DROP -> '||SUBSTR(SQLERRM, 1, 50));
END;
BEGIN
EXECUTE IMMEDIATE 'CREATE TABLE BY_DYNAMIC(X DATE)';
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('DYNAMIC SQL CREATE -> '||SUBSTR(SQLERRM, 1, 50));
END;
END;
/