MS-SQL 에서의 변수를 DECLARE 선언해서 오라클에서도 쓰고 싶은데...어떻게해야되죠? 0 3 16,485

by 끌루니 [PL/SQL] PL-SQL DECLARE [2013.03.08 13:12:23]


예를 들어서 MS-SQL 에서는 
DECLARE @V_TEST   VARCHAR(10)
SET @V_TEST = 'aaa'
SELECT * FROM 테이블 WHERE 컬럼=@V_TEST


이런식으로 쿼리 스크립트를 짤수가 있어서 프로그램 작성시 DATABASE 딴에서 변수에다고 값을 넣어보고
SELECT 쿼리 실행해서 결과를 보고 했었습니다.

그런데 오라클에서는 

DECLARE V_TEST VARCHAR2(10);
V_TEST := 'AAA';
BEGIN
SELECT * FROM 테이블 WHERE 컬럼=@V_TEST
END;


이렇게 하면 오류가 나는군요..


물론 

SELECT * FROM 테이블 WHERE 컬럼=:V_TEST

해서 토드같은 프로그램에서 실행을 시키면 파라미터 입력창이 나오기는 하지만 그렇게는 불편해서 좀 그렇네요.
좋은 방법이 없을까요?

by 마농 [2013.03.08 13:42:56]

선언은 V_TEST 로 하시고 사용은 @V_TEST 로 하시니 안되죠. 골벵이 빼세요.
그러나...
오라클은 PL/SQL 에서 단독 Select 사용 못합니다.
- 1건인 경우 - INTO 절과 함께 사용
- 다건인 경우 - 커서 이용.


by 끌루니 [2013.03.08 13:52:39]
@V_TEST
아 넵 그건 저도 알고 있습니다.

그러면 오라클 PL/SQL 에서는 어떤방식으로 해야되는건가요?
SELECT INTO로 테이블형태로 넣어놓고 하는건가요?
잘 이해가 ....
중요한 것은 쿼리 스크립트안에 변수를 지정해놓고 
거기에 값을 바꿔가며 레코드를 조회할수 있느냐 그 문제입니다.

참 그리고 
1만건의 조회하는 쿼리를 작성하여 실행하면 1~2초면 나오는데 
총 레코드의 갯수를 알기위해서 앞에다가   COUNT(*) OVER () AS T_CNT 
를 붙이면 너무 느리네요. 1분이 넘게 걸립니다.
SELECT  AA, BB, CC FROM A, B, C WHERE A.1=B.1 AND A.2=C.2 
이런쿼리가  2초라면
SELECT COUNT(*) OVER () AS T_CNT, AA, BB, CC FROM A, B, C WHERE A.1=B.1 AND A.2=C.2 
이쿼리는 1분이 넘게 걸리는군요.


by 이재현 [2013.03.11 12:53:59]

SELECT AA, BB, CC FROM A, B, C WHERE A.1=B.1 AND A.2=C.2
이런쿼리가 2초라면

위 쿼리를 어디서 실행 하신건가요 토드?? 만약 토드나 오렌지 같은 툴을 사용해서 2초라면.. 패치단위로

부분범위처리가 발생하여 그런듯합니다..

그리고 다건인 경우 - 커서 이용 <-- 마농님 말씀..

파이프라인 펑션으로 구현해보세요..
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입