2010-08-03 5 views
2
다음 예에서

는 recordId를 값에 액세스 할 수 SQLPLUS

variable recordId number; 

BEGIN 
    SELECT MAX(recordvalue) 
    INTO recordId 
    FROM sometable; 
END; 

PRINT recordid; 
SELECT * 
    FROM someothertable 
WHERE recordkey = &recordId; 

마지막 행의 선택 문 바인드 변수 액세스. pl/sql 블록 내에서 recordId에 액세스 할 수 있다는 것을 알고 있습니다. recordId가 있는데 pl/sql 블록에없는 SQL 문에서 recordId에 액세스하는 방법이 있습니까? (마지막 줄과 같다).

+0

은 왜 익명 PLSQL 블록의 범위를 벗어난 더 많은 작업을 수행 할 것? –

+0

SQL * Plus에서도 바인드 변수를 사용할 수 있지만 여전히 : : recordId입니다. '&'버전은 값을 요구하고'변수'버전과 직접적인 관계가 없습니다. 왜 이런 식으로 믹스하고 매치시키고 싶은지 모르겠다. –

답변

7

SQL * Plus에서도 바인드 변수를 사용할 수 있으며 여전히 :recordId입니다. & 버전은 값을 묻는 메시지를 표시하며 variable 버전과 직접적인 관계가 없습니다.

variable recordId number; 

BEGIN 
    SELECT MAX(recordvalue) 
    INTO :recordId 
    FROM sometable; 
END; 
/

PRINT recordid; 

SELECT * 
FROM someothertable 
WHERE recordkey = :recordId; 

변수를 바인딩 값을 할당하는 약간 더 일반적인 방법은 exec :recordId := value;으로하지만, exec 어쨌든 정말 익명 블록 단지 속기이다.

왜 이렇게 섞어서 일치시키고 싶은지 잘 모르겠다. 의도 나중에 하나 하나 개의 쿼리의 결과를 사용하는 경우, 당신은 new_value 대신 시도 할 수 :

column x_val new_value y_val; -- could also noprint if you do not need to see the intermediate value 

SELECT MAX(recordvalue) x_val 
FROM sometable; 

SELECT * 
FROM someothertable 
WHERE recordkey = &y_val; 
관련 문제