web-dev-qa-db-ja.com

Oracleで変数を宣言して使用するにはどうすればよいですか?

私の主なスキルは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で変数を宣言して使用するにはどうすればよいですか?

19
Mark Allison

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 ":" */
18
ik_zelf

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;

クエリ内で置換が実行されるアンパサンドに注意してください。

3