調査に1時間費やしましたが、変数を正しく定義してSQLで使用する方法を理解できていないようです。
これは私がこれまでに作成したものです:
DECLARE startDate DATE := to_date('03/11/2011', 'dd/mm/yyyy');
その中から私は返事をもらいます:
ORA-06550:行1、列63:PLS-00103:次のいずれかが予期されているときに、「ファイルの終わり」の記号が見つかりました:
関数パッケージプラグマプロシージャサブタイプタイプを開始現在のカーソルから使用
詳細:DECLARE startDate DATE:= to_date('03/11/2011 '、' dd/mm/yyyy '); 1行目のORA-06550のエラー:1行目、63列目:PLS-00103:次のいずれかが予期されているときに、「ファイルの終わり」という記号が見つかりました。
関数パッケージプラグマプロシージャサブタイプタイプを開始現在のカーソルから使用
このような簡単な作業を行う方法を見つけたいです。
変数宣言は正しいです。
DECLARE
キーワードは、PL/SQLブロック(本体がBEGIN
とEND;
で区切られている)でスコープされた変数を定義するために使用されます。この変数をどのように使用しますか?
次のPL/SQLは私にとってはうまく機能します。
DECLARE
startDate DATE := to_date('03/11/2011', 'dd/mm/yyyy');
reccount INTEGER;
BEGIN
SELECT count(*) INTO reccount
FROM my_table tab
WHERE tab.somedate < startDate;
dbms_output.put_line(reccount);
END;
DEFINE
ステートメントを使用して、単純な文字列置換変数を使用することもできます。 SQL/PLUSやTOADなどのクライアントに適しています。
DEFINE start_date = "to_date('03/11/2011', 'dd/mm/yyyy')"
SELECT COUNT(*) from my_table tab where tab.some_date < &start_date;
Toadで試行していることを達成するために、変数を宣言する必要はまったくありません。コロンで始まる変数を含めるだけで、クエリを実行するときに変数の値の入力を求められます。例えば:
select * from all_tables where owner = :this_is_a_variable;
これが最初に機能しない場合は、エディター内の任意の場所を右クリックし、[置換変数のプロンプト]がオンになっていることを確認します。
SQL Serverが変数を処理する方法と同じようにしたい場合(またはSQL * Plusで同じことができるようにしたい場合)、次のように記述できます。
var this_is_a_variable varchar2(30);
exec :this_is_a_variable := 'YOUR_SCHEMA_NAME';
print this_is_a_variable;
select * from all_tables where owner = :this_is_a_variable;
ただし、これをToadで機能させるには、通常の「ステートメントの実行」コマンドではなく、「スクリプトとして実行」で実行する必要があります。
OracleのPL/SQLはSQLではないSQLであることに注意してください。
PL/SQLは手続き型言語です。 SQLは手続き型ではありませんが、ユーザーが「&var」構文を介して入力できる「変数」を定義できます( http://www.orafaq.com/node/515 を参照)。
これは古い投稿ですが、誰かがこれにつまずいた場合は(先ほどと同じように)、CTEでこれを処理できます。
with params as (
select date '2011-11-03' as startdate
from dual
)
select . . .
from params cross join
. . .
SQL Serverでもほぼ同じ構文が機能します(date
固有のものとfrom dual
を除いて)。
これを試してください:
DEF startDate = to_date('03/11/2011', 'dd/mm/yyyy');
Select &startDate from dual;