Select 문에서 변수 선언 및 설정
Oracle에서 일부 변수를 선언하고 select 문에 사용하는 간단한 쿼리를 작성하려고 합니다.이전에 SQL Server에서 다음과 같은 작업을 수행한 적이 있습니다.
DECLARE @date1 DATETIME
SET @date1 = '03-AUG-2010'
SELECT U.VisualID
FROM Usage u WITH(NOLOCK)
WHERE U.UseTime > @Date1
검색한 결과 Select 문에서 이와 같은 변수를 선언하고 설정할 수 없습니다.이게 맞는 건가요, 아니면 제가 뭔가를 놓치고 있는 건가요?
검색한 결과 Select 문에서 이와 같은 변수를 선언하고 설정할 수 없습니다.이게 맞는 건가요, 아니면 제가 뭔가 놓친 건가요?
Oracle PL/SQL 및 SQL에는 두 개의 개별 엔진이 있는 두 개의 개별 언어가 있습니다.PL/SQL 내에 SQL DML을 포함할 수 있으며, 그러면 변수가 생성됩니다.다음과 같은 익명 PL/SQL 블록.참고:/
PL/SQL의 일부가 아니라 SQL*Plus에 이전 블록을 전송하도록 지시합니다.
declare
v_Date1 date := to_date('03-AUG-2010', 'DD-Mon-YYYY');
v_Count number;
begin
select count(*) into v_Count
from Usage
where UseTime > v_Date1;
dbms_output.put_line(v_Count);
end;
/
문제는 T-SQL 코드와 동일한 블록이 작동하지 않는다는 것입니다.
SQL> declare
2 v_Date1 date := to_date('03-AUG-2010', 'DD-Mon-YYYY');
3 begin
4 select VisualId
5 from Usage
6 where UseTime > v_Date1;
7 end;
8 /
select VisualId
*
ERROR at line 4:
ORA-06550: line 4, column 5:
PLS-00428: an INTO clause is expected in this SELECT statement
PL/SQL(익명 블록, 저장 프로시저 또는 저장 함수)에서 쿼리 결과를 전달하려면 커서를 선언하고 열고 호출 프로그램으로 반환해야 합니다.(이 질문에 대답할 수 있는 범위를 벗어납니다.편집: Oracle 저장 프로시저에서 결과 집합 가져오기 참조)
데이터베이스에 연결되는 클라이언트 도구에는 자체 바인딩 변수가 있을 수 있습니다.SQL*Plus의 경우:
SQL> -- SQL*Plus does not all date type in this context
SQL> -- So using varchar2 to hold text
SQL> variable v_Date1 varchar2(20)
SQL>
SQL> -- use PL/SQL to set the value of the bind variable
SQL> exec :v_Date1 := '02-Aug-2010';
PL/SQL procedure successfully completed.
SQL> -- Converting to a date, since the variable is not yet a date.
SQL> -- Note the use of colon, this tells SQL*Plus that v_Date1
SQL> -- is a bind variable.
SQL> select VisualId
2 from Usage
3 where UseTime > to_char(:v_Date1, 'DD-Mon-YYYY');
no rows selected
위의 내용은 SQL Plus에 있으며 Toad PL/SQL 개발자 등에서는 작동하지 않을 수 있습니다. 변수와 exec로 시작하는 행은 SQL Plus 명령입니다.SQL 또는 PL/SQL 명령이 아닙니다.테이블이 비어 있으므로 선택한 행이 없습니다.
저는 이것을 시도해 보았고 효과가 효과가 있었습니다.
define PROPp_START_DT = TO_DATE('01-SEP-1999')
select * from proposal where prop_start_dt = &PROPp_START_DT
그SET
명령어는 TSQL에 따라 다릅니다. 여기에 게시한 내용과 동일한 PLSQL이 있습니다.
v_date1 DATE := TO_DATE('03-AUG-2010', 'DD-MON-YYYY');
SELECT u.visualid
FROM USAGE u
WHERE u.usetime > v_date1;
또한 변수 앞에 "@"를 붙이지 않아도 됩니다. 변수와 열/등을 구분하기 위해 변수 앞에 "v_"를 붙입니다.
Oracle에 해당하는 NOLOCK에 대해 이 스레드를 참조하십시오.
to_date 함수를 사용해 보십시오.
SQL Server에서도 마찬가지입니다. 정말 짜증이 났습니다.Toad Data Point 또는 Toad for Oracle을 사용하는 사용자의 경우 매우 간단합니다.변수 이름 앞에 콜론을 배치하기만 하면 Toad에서 실행 시 값을 입력하는 대화 상자를 열도록 요청합니다.
SELECT * FROM some_table WHERE some_column = :var_name;
언급URL : https://stackoverflow.com/questions/3400058/declaring-setting-variables-in-a-select-statement
'programing' 카테고리의 다른 글
read.csv에서 colClass 지정 (0) | 2023.06.15 |
---|---|
매핑된 드라이브의 실제 경로를 확인하려면 어떻게 해야 합니까? (0) | 2023.06.15 |
왜 (x)++의 크기가 컴파일됩니까? (0) | 2023.06.15 |
Oracle: DDL 및 트랜잭션 롤백 (0) | 2023.06.15 |
판다 고유 값 여러 열 (0) | 2023.06.15 |