web-dev-qa-db-ja.com

単純なOracle変数SQL割り当て

調査に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:次のいずれかが予期されているときに、「ファイルの終わり」という記号が見つかりました。

関数パッケージプラグマプロシージャサブタイプタイプを開始現在のカーソルから使用

このような簡単な作業を行う方法を見つけたいです。

9
m.edmondson

変数宣言は正しいです。

DECLAREキーワードは、PL/SQLブロック(本体がBEGINEND;で区切られている)でスコープされた変数を定義するために使用されます。この変数をどのように使用しますか?

次の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;
15
Xavi López

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で機能させるには、通常の「ステートメントの実行」コマンドではなく、「スクリプトとして実行」で実行する必要があります。

5
Allan

OracleのPL/SQLはSQLではないSQLであることに注意してください。

PL/SQLは手続き型言語です。 SQLは手続き型ではありませんが、ユーザーが「&var」構文を介して入力できる「変数」を定義できます( http://www.orafaq.com/node/515 を参照)。

4

これは古い投稿ですが、誰かがこれにつまずいた場合は(先ほどと同じように)、CTEでこれを処理できます。

with params as (
      select date '2011-11-03' as startdate
      from dual
     )
select . . .
from params cross join
     . . .

SQL Serverでもほぼ同じ構文が機能します(date固有のものとfrom dualを除いて)。

3
Gordon Linoff

これを試してください:

DEF  startDate = to_date('03/11/2011', 'dd/mm/yyyy');
Select &startDate from dual;
0
Slim Aloui