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; BEGIN SELECT 12345 INTO my_num FROM dual; 終わり; / select * from my_table sa where sa.my_col =:my_num;
マシュー

どのようなエラーが発生しますか?(テストおよび動作)
ik_zelf

Jon of All Tradesが投稿したソリューションを実際に試してみましたが、それは私のニーズに完全に適合しました。つまり、DEFINEを使用して&で変数を参照しました。
マシュー

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;

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


これは、これらの機能のいずれかを使用する場合のOracle用のヒキガエルに私の仕事:Execute as scriptまたはExecute via Toad script runnerまたはExecute via SQL*Plus。ただし、で実行しようとするExecute/compile statement at caretと、エラーメッセージ「ORA-009000:無効なSQLステートメント」が返されます。
SherlockSpreadsheets
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.