728x90
테스트 목적 :
SP(Stored Procedure) 내
1. SQL TEXT 가 대문자로 인식 확인
2. SP 내 주석 무시됨 확인
3. SP 내 주석 대신 HINT /*+ */ 확인
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 | <<1. SP 내 SQL TEXT 가 대문자로 인식 확인>> -- 테스트 DB 에서 Shared Pool 비울것 ALTER SYSTEM FLUSH SHARED_POOL -- 테스트 환경 구성 CREATE TABLE SAMPLE_TEST ( A1 NUMBER, A2 VARCHAR2(100)) ; INSERT INTO SAMPLE_TEST VALUES ( 1, 'A' ); COMMIT ; -- 평션 생성 , 일부러 쿼리를 소문장로 생성 CREATE OR REPLACE FUNCTION TEST_FUNC RETURN NUMBER IS V_NUM NUMBER ; BEGIN select count(*) AS T1_TEST into v_num from sample_test ; RETURN V_NUM; END ; -- 평션 수행 select TEST_FUNC from dual ; -- 평셩 수행 이력 확인 SELECT /*+ NO_MERGE */ SQL_ID, SQL_TEXT FROM V$SQLAREA WHERE ( INSTR(SQL_TEXT,'SAMPLE_TEST',1,1) >= 1 AND INSTR(SQL_TEXT,'V$SQLAREA',1,1) = 0 ) AND SQL_TEXT NOT LIKE 'EXPLAIN PLAN%' AND SQL_TEXT NOT LIKE 'SELECT SQL^_TEXT%' ESCAPE '^' AND SQL_TEXT NOT LIKE 'SELECT PLAN_TABLE%' ORDER BY SQL_TEXT DESC ; << 결과 >> 쿼리 문장이 대문자로 기재되어 있음 >>> 1. SQL TEXT 가 대문자로 인식 확인 4km37z1hf7qsd SELECT COUNT(*) AS T1_TEST FROM SAMPLE_TEST <<2. SP 내 주석 무시됨 확인>> -- 테스트 DB 에서 Shared Pool 비울것 ALTER SYSTEM FLUSH SHARED_POOL -- 평션 수정, -- TEST002 << 주석을 넣음 CREATE OR REPLACE FUNCTION TEST_FUNC RETURN NUMBER IS V_NUM NUMBER ; BEGIN select count(*) -- TEST002 AS T2_TEST into v_num from sample_test ; RETURN V_NUM; END ; -- 평션 수행 select TEST_FUNC from dual ; -- 평셩 수행 이력 확인 SELECT /*+ NO_MERGE */ SQL_ID, SQL_TEXT FROM V$SQLAREA WHERE ( INSTR(SQL_TEXT,'SAMPLE_TEST',1,1) >= 1 AND INSTR(SQL_TEXT,'V$SQLAREA',1,1) = 0 ) AND SQL_TEXT NOT LIKE 'EXPLAIN PLAN%' AND SQL_TEXT NOT LIKE 'SELECT SQL^_TEXT%' ESCAPE '^' AND SQL_TEXT NOT LIKE 'SELECT PLAN_TABLE%' ORDER BY SQL_TEXT DESC ; << 결과 >> 주석은 포함되지 않았음 >>> SP 내 주석 무시됨 확인 dv8499am3rvuu SELECT COUNT(*) AS T2_TEST FROM SAMPLE_TEST <<3. SP 내 주석 대신 HINT /*+ */ 확인>> -- 테스트 DB 에서 Shared Pool 비울것 ALTER SYSTEM FLUSH SHARED_POOL -- 평션 수정, /*+ TEST003 */ 힌트를 넣음 CREATE OR REPLACE FUNCTION TEST_FUNC RETURN NUMBER IS V_NUM NUMBER ; BEGIN select /*+ TEST003 */ count(*) AS T3_TEST into v_num from sample_test ; RETURN V_NUM; END ; -- 평션 수행 select TEST_FUNC from dual ; -- 평셩 수행 이력 확인 SELECT /*+ NO_MERGE */ SQL_ID, SQL_TEXT FROM V$SQLAREA WHERE ( INSTR(SQL_TEXT,'SAMPLE_TEST',1,1) >= 1 AND INSTR(SQL_TEXT,'V$SQLAREA',1,1) = 0 ) AND SQL_TEXT NOT LIKE 'EXPLAIN PLAN%' AND SQL_TEXT NOT LIKE 'SELECT SQL^_TEXT%' ESCAPE '^' AND SQL_TEXT NOT LIKE 'SELECT PLAN_TABLE%' ORDER BY SQL_TEXT DESC ; << 결과 >> 힌트 포함 확인 >>> 3. SP 내 주석 대신 HINT /*+ */ 확인 4y1wgbykbzjwj SELECT /*+ TEST003 */ COUNT(*) AS T3_TEST FROM SAMPLE_TEST | cs |