[SQL] 동적 SQL LOOP
SQL동적 SQL LOOP
동적 SQL은 기본적으로 생각이 나는 테이블에 포함 된 행 수를 얻기 위해 "p_in_table"있었던 파라미터와 절차를 사용할 수 있다는 것입니다, 내 친구가 아닙니다.
CREATE OR REPLACE PROCEDURE how_many_rows(p_in_table VARCHAR2)
IS
TYPE cur_cur IS REF CURSOR;
v_cur_cur cur_cur;
v_rowcount NUMBER(28);
v_cur_txt VARCHAR2(299);
BEGIN
v_cur_txt := 'SELECT * FROM ' || p_in_table;
OPEN v_cur_cur FOR v_cur_txt;
LOOP
v_rowcount := v_cur_cur%ROWCOUNT;
EXIT WHEN v_cur_cur%NOTFOUND;
END LOOP;
CLOSE v_cur_cur;
dbms_output.put_line(v_rowcount);
END;
누군가가 내가 잘못을하고있는 중이 야 무엇을 말해한다면 그것을 preciate시겠습니까?
해결법
-
==============================
1.더 그래서, 기본적으로, 당신은 무한 루프를 가지고, 그런 문 또는 무언가를 가져 - 문제는 당신이 커서를 반복하지 것입니다. 이 같은 것을 할 필요가이 문제를 방지하려면 :
더 그래서, 기본적으로, 당신은 무한 루프를 가지고, 그런 문 또는 무언가를 가져 - 문제는 당신이 커서를 반복하지 것입니다. 이 같은 것을 할 필요가이 문제를 방지하려면 :
CREATE OR REPLACE PROCEDURE how_many_rows (p_in_table VARCHAR2) IS TYPE cur_cur IS REF CURSOR; v_cur_cur cur_cur; v_rowcount NUMBER(28); v_cur_txt VARCHAR2(299); v_row SOME_TABLE%ROWTYPE; --add row variable BEGIN v_cur_txt := 'SELECT * FROM '|| p_in_table; OPEN v_cur_cur FOR v_cur_txt; LOOP v_rowcount := v_cur_cur%ROWCOUNT; FETCH v_cur_cur INTO v_row; --fetch a row in it EXIT WHEN v_cur_cur%NOTFOUND; END LOOP; CLOSE v_cur_cur; DBMS_OUTPUT.PUT_LINE(v_rowcount); END;
그러나, 당신이 볼 수 있듯이, 당신이 알아야 할이 작업을 수행하는, 그래서 이것은 일반적인 솔루션 어떤 테이블 당신에게있는 거 quering을하지 않습니다. 어쩌면 거기에 이것에 대한 해결 방법은,하지만 난 당신이 EXECUTE IMMEDIATE를 가진 예를 들어, 더 간단하고 효율적인 방법을 사용, 제안 :
CREATE OR REPLACE PROCEDURE HOW_MANY_ROWS(p_in_table VARCHAR2) IS v_tmp NUMBER; BEGIN EXECUTE IMMEDIATE 'SELECT COUNT(1) FROM ' || p_in_table INTO v_tmp; DBMS_OUTPUT.PUT_LINE(v_tmp); END;
당신의 테이블에서 ROWNUM을 가져, 모든 테이블이가 있고 그것의 유형을 알고 - - 번호를 확인, 나는이 여기에 당신의 방법을 사용하고 달성하는 방법에 대한 생각을 준 것은 내가 함께 결국 한 것입니다. 따라서이 절차는 일반적인 경우에 작동합니다 :
CREATE OR REPLACE PROCEDURE how_many_rows (p_in_table VARCHAR2) IS TYPE cur_cur IS REF CURSOR; v_cur_cur cur_cur; v_rowcount NUMBER(28); v_cur_txt VARCHAR2(299); v_row NUMBER; --add rownum variable BEGIN v_cur_txt := 'SELECT ROWNUM FROM '|| p_in_table; --select only rownum from target table OPEN v_cur_cur FOR v_cur_txt; LOOP v_rowcount := v_cur_cur%ROWCOUNT; FETCH v_cur_cur INTO v_row; --fetch rownum in it EXIT WHEN v_cur_cur%NOTFOUND; END LOOP; CLOSE v_cur_cur; DBMS_OUTPUT.PUT_LINE(v_rowcount); END;
from https://stackoverflow.com/questions/21090673/dynamic-sql-loop by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 오라클 10g / 11g Mac 용 [마감] (0) | 2020.07.12 |
---|---|
[SQL] 지수하지만 차없는 키와 MySQL의 테이블 (0) | 2020.07.12 |
[SQL] 여러 값을 FIND_IN_SET (0) | 2020.07.12 |
[SQL] 오라클 DB 인용 열 이름 (0) | 2020.07.12 |
[SQL] 두 개의 서로 다른 결과 집합을 받고 이러한 두 개의 쿼리의 차이는 무엇입니까? (0) | 2020.07.12 |