Oracle에서 변수를 어떻게 선언하고 사용합니까?


18

저의 주요 기술은 SQL Server에 관한 것이지만 Oracle 쿼리를 조정하라는 요청을 받았습니다. 다음 SQL을 작성했습니다.

declare @startDate int
select @startDate = 20110501

그리고 나는이 오류를 얻는다 :

declare @startDate int
select @startDate = 20110501
Error at line 1
ORA-06550: line 1, column 9:
PLS-00103: Encountered the symbol "@" when expecting one of the following:

   begin function package pragma procedure subtype type use
   <an identifier> <a double-quoted delimited-identifier> form
   current cursor

Oracle에서 변수를 어떻게 선언하고 사용합니까?

답변:


18

내부 pl / sql 블록 :

declare
 startdate number;
begin
  select 20110501 into startdate from dual;
end;
/

바인드 변수 사용 :

var startdate number;
begin
  select 20110501 into :startdate from dual;
end;
/

PL / SQL 절차가 성공적으로 완료되었습니다.

SQL> print startdate

 STARTDATE
----------
  20110501

쿼리에서 :

select object_name 
from user_objects 
where created > to_date (:startdate,'yyyymmdd');  /*prefix the bind variable wïth ":" */

불행히도 이것은 나를 위해 작동하지 않습니다. var my_num NUMBER; 이중 선택 my_num으로 12345 시작; 종료; / my_table sa에서 *를 선택하십시오. 여기서 sa.my_col = : my_num;
Matthew

어떤 오류가 발생합니까? (방금 테스트 및 작동)
ik_zelf

실제로 Jon의 All Trades가 게시 한 솔루션을 시도해 보았습니다. 즉 DEFINE을 사용하고 &로 변수를 참조하는 등 내 요구에 완벽하게 작동했습니다.
Matthew

3

SQL * Plus는 추가 형식을 지원합니다.

DEFINE StartDate = TO_DATE('2016-06-21');
DEFINE EndDate   = TO_DATE('2016-06-30');

SELECT
    *
FROM
    MyTable
WHERE
    DateField BETWEEN &StartDate and &EndDate;

쿼리 내에서 대체가 수행되는 앰퍼샌드에 유의하십시오.


이것은이 함수를 사용하는 경우 Toad for Oracle을 나를 위해 일한 : Execute as script또는 Execute via Toad script runnerExecute via SQL*Plus. 그러나 실행하면 Execute/compile statement at caret"ORA-009000 : invalid SQL statement"라는 오류 메시지가 나타납니다.
SherlockSpreadsheets
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.