CREATE OR REPLACE PROCEDURE get_data_freq(in_tab_name in varchar2, in_col_name in varchar2) IS v_query VARCHAR2(1000); v_result VARCHAR2(1000); BEGIN v_query := 'SELECT * FROM (SELECT '|| in_col_name ||' || ''('' || COUNT('|| in_col_name ||') || '')'' AS data_frequency FROM '|| in_tab_name ||' GROUP BY '|| in_col_name ||' ORDER BY COUNT('|| in_col_name ||') DESC) WHERE ROWNUM <= 6'; EXECUTE IMMEDIATE v_query into v_result; END;
테이블 명과 컬럼 명을 파라미터로 받아 데이터 빈도 수 상위 6위까지의 데이터와 그 빈도 수를 받아오는
프로시져를 작성하려고 합니다.
ORA-01422가 발생하는 것으로 보아 cursor를 써야하는 것 같은데 java 초급 개발자라
EXECUTE IMMEDIATE 와 cursor를 동시에 어떻게 써야하는지 잘 모르겠습니다.
cursor로 받아서 java에서 callablestatment로 받아오려고 하는데
cursor를 어떤식으로 써야하나요
CREATE OR REPLACE PROCEDURE get_data_freq ( in_tab_name IN VARCHAR2 , in_col_name IN VARCHAR2 , v_result OUT SYS_REFCURSOR ) IS v_query VARCHAR2(1000); BEGIN v_query := 'SELECT * FROM (SELECT ' || in_col_name ||' || ''('' || COUNT('|| in_col_name ||') || '')'' AS data_frequency ' || ' FROM ' || in_tab_name || ' GROUP BY ' || in_col_name || ' ORDER BY COUNT('|| in_col_name ||') DESC) ' || ' WHERE ROWNUM <= 6' ; OPEN v_result FOR v_query; END; /