2017-10-23 5 views
0

테이블에서 레코드 수를 얻기 위해 간단한 표준 SQL 쿼리를 사용하고 있으며 나중에 사용할 수 있도록이를 변수에 저장하려고합니다.oracle sql의 대체 변수

이유는 내 테이블에 거대한 데이터가 포함되어 있으며 아래 쿼리를 다시 사용하고 싶지 않습니다.

select count(1) from mytable; 

또한 그냥 SQL 문을 찾고, PL/SQL를 사용하지 않습니다.

define 키워드를 사용해 보았지만 정의 변수에 카운트를 설정할 수 없습니다.

어떻게 변수에 저장할 수 있는지 제안하십시오.


예 :

DEFINE some_variable; 

SELECT COUNT(1) into some_variable,sysdate as CLEANUP_START FROM TABLE_TEMP; 

--offcourse this is not correct for simple sql statment.however i want to store it in variable. 

DELETE from MY_TABLE where Primary_key in (select primary_key from TABLE_TEMP); 

--around 10M records are deleting 

SELECT sysdate as CLEANUP_END FROM dual; 

---There are such 10 delete statments on different tables. 

---Spool the deleted record in csv file. 

spool output.csv 

select 'RESULT' from dual; 

---And at the last i want print the summary of the cleanup records. 

select primary_key from TABLE_TEMP; 

select some_variable||',Records is deleted from MY_TABLE' from DUAL; 

spool off; 
+0

이 변수를 사용할 위치와 방법을 설명하는 샘플 코드를 게시하십시오. –

+0

여기서는 성능이 중요하지만 정확성은 그다지 중요하지 않습니다 (변수 수가 채워진 후 행 수가 변경 될 수 있음). 대신 데이터 사전 사용을 고려 했습니까? 예 :'NUM_ROWS FROM USER_TABLES WHERE TABLE_NAME = 'MY_TABLE'; ' – alexgibbs

답변

2

은 대체 변수를 사용하지 마십시오; 바인드 변수를 사용하십시오. 아래에서는 SQL * Plus의 스크린 샷을 보여줍니다.

number 유형의 바인드 변수 cnt을 선언합니다. 그런 다음 테이블에서 행을 계산하고 그 결과를 :cnt에 할당하기 위해 익명 블록 (SQL * Plus exec 명령을 사용하여 간단하고 편리하게)을 사용합니다. (내가 테이블 all_objects에서 행을 세지 만, 내가 사용하는 테이블은 상관이 없다 - 당신이 계산해야하는 테이블에서 계산하라.) 마지막으로 dual에서이 변수를 선택하여 해당 값을 표시하고 select (및 기타 SQL) 문에서이 변수를 사용하는 방법을 보여줍니다.

SQL> variable cnt number 
SQL> exec select count(*) into :cnt from all_objects 

PL/SQL procedure successfully completed. 

Elapsed: 00:00:00.45 
SQL> select :cnt from dual; 

     :CNT 
---------- 
    89814 

1 row selected. 

Elapsed: 00:00:00.00 
SQL> 
+0

감사하지만 SQL 개발자 도구를 사용할 수 없습니다. : 익명 블록을 실행할 수 있지만 마지막 문장은 실행할 수 없습니다. – Amir

+0

@Amir - 질문에 SQL Developer에 대한 언급이 전혀 없습니다 ** 나는 쓰여지지 않은 것을 읽을 수 없습니다. – mathguy