2016-07-18 6 views
2

이 작동합니다Oracle SQL Developer에서 변수를 실제로 얻는 방법은 무엇입니까? 이런 식으로 대체 변수를 사용하여 Oracle SQL Developer에서

DEFINE var_t1_id int = 2601; 
DEFINE var_t2_id int = (SELECT t2_id FROM table1 WHERE t1_id = &var_t1_id); 
DEFINE var_t3_id int = (SELECT t3_id FROM table1 WHERE t1_id = &var_t1_id); 

SELECT * 
FROM table2 
WHERE t2_id = &var_t2_id; 

SELECT * 
FROM table3 
WHERE t3_id = &var_t3_id; 

비록를, 내가 뭔가에 2601을 변경하고 쿼리를 다시 실행하면, SQL 개발자는 위해 2601 계속 사용 대체 !!!

variable var_t1_id number; 
variable var_t2_id number; 
variable var_t3_id number; 

exec :var_t1_id := 2601; 
exec SELECT t2_id INTO :var_t2_id FROM table1 WHERE t1_id = :var_t1_id; 
exec SELECT t3_id INTO :var_t3_id FROM table1 WHERE t1_id = :var_t1_id; 

SELECT * 
FROM table2 
WHERE t2_id = :var_t2_id; 

SELECT * 
FROM table3 
WHERE t3_id = :var_t3_id; 

이 : 아니 내가 원하는 ...

나는이 시도

DEFINE var_t1_id int = 2601; 
DEFINE var_t2_id int = (SELECT t2_id FROM table1 WHERE t1_id = (SELECT &&var_t1_id from dual)); 
DEFINE var_t3_id int = (SELECT t3_id FROM table1 WHERE t1_id = (SELECT &&var_t1_id from dual)); 

SELECT * 
FROM table2 
WHERE t2_id = (SELECT &&var_t2_id FROM dual); 

SELECT * 
FROM table3 
WHERE t3_id = (SELECT &&var_t3_id FROM dual); 

을하지만 아무도 제대로 작동하지 않습니다 - 나는, 스크립트가 나를 메시지를 표시하지 않고 실행해야 의미 값을 ...

어떻게 해결할 수 있습니까?

저는이 모든 것이 매우 단순한 SQL Server에 익숙합니다 ... 물론 오라클의 지식을 놓치고 있습니다 ... 왜 여기에 팁을 요청 하는지요.

+0

으로 시도 할 수 있습니다. 많은 보고서 (예 : 데이터 사전 보고서보기)를 사용하면 "비공개"로 시연 된이 동작을 볼 수 있습니다. –

+0

두 번째 코드 블록에 대해 이야기하고 있습니까? 셋째, DEFINE 섹션이 있습니다. 바인드 바를 정의하는 올바른 방법일까요? – user3341592

+0

SQL Developer에서 대체 및 바인드 변수가 어떻게 작동하는지 (필자가 제공 한 특정 예가 아님)에 대해 설명했습니다. 오라클 관점에서 대체 변수는 주로 SQL * Plus 스크립트에서 사용됩니다 (잘 문서화 된 동작). 바인드 변수를 사용하여 일반적으로 SQL Developer에서 익명 블록 또는 객체 (예 : 패키지) 또는 DML로 사용합니다. BTW, Justin Cave는 비슷한 질문에 대한 좋은 답변을 가지고 있습니다. http://stackoverflow.com/questions/5653423/how-do-i-use-variables-in-oracle-sql-developer –

답변

0

당신은 당신의 결과가 your_variable_1에 저장됩니다

DECLARE 
    --all your variables 
    yout_variable_0 int := 1608; 
    your_variable_1 int; 
BEGIN 
    select [...] 
    into your_variable_1 
    from your_table 
    where your_column = your_variable_0; 
END; 

이제 INTO 키워드를 시도 할 수 있습니다.

당신은 SQL 개발자에 바인드 변수를 정의하지 않으면 당신은 프롬프트 (대체 변수와 같은 동작을) 받게됩니다,이 간단한 쿼리

DECLARE 
    --all your variables 
    your_variable_0 varchar2(200) := '201605'; 
    your_variable_1 varchar2(200); 
BEGIN 
    select your_variable_0 
    into your_variable_1 
    from dual; 

    dbms_output.put_line('Output ...' || your_variable_1); 

END; 
+0

본인의 실제 사용 사례에 맞게 스켈레톤을 수정했습니다. 비록 (F5 키를 누르거나 녹색 왼쪽 화살표를 클릭하는) SQL Developer는 var_t2_id 및 var_t3_id에 대해 "Substitution Variable 입력"을 팝업하지만, 나는 그 대답을 제공 할 수 없습니다. 첫 번째 "SELECT .. INTO .. ​​FROM"요청을 실행 중 ... 뭐가 문제입니까? – user3341592

+0

SQLDeveloper에 대한 확신이 없지만 모든 코드를 선택하고 실행하십시오 ... –

+0

그랬습니다 ... 같은 팝업 ... (PS- 무엇을 사용하고 있습니까?) – user3341592