2017-04-12 6 views
0

Oracle SQL * Plus(およびそのようなSQL Developer)では、変数の宣言が日付(Citation)としてサポートされていません。変数を使って日付を取り込む適切な方法は?

私はvarcharに選択できますが、文字列に変換する必要があります。それから、それはもう実際には日付ではなく、私は日付の算術演算を行うことができません。

日付変数を使用する適切な方法は何ですか? BEGIN/ENDの開始時に宣言する代わりに変数を使用しています。なぜなら、選択肢を表示しやすくするために、ブロックの外側でそれらを使用できるようにする必要があるからです。

clear screen; 
variable someid number; 
variable somedate varchar; 
exec :someid := 1234; 

Begin 
select c.some_timestamp into :somedate from someschema.sometable c 
where c.someid = :someid ; 
end; 
/

select :somedate from dual; 

答えて

2

あなたは算術演算を行いたい場合to_dateTO_TIMESTAMPを使用する必要があります。

明らかに、SqlPlusという制限です。以下は例です:

variable my_date varchar2(30) 

exec :my_date := '12-04-2017'; 

select * from mytable where date_col = to_date(:my_date,'dd-mm-yyyy'); 

これは同じこと多かれ少なかれを行い、ここでDeclare a variable of type DATE using var

+0

「SqlPlusの制限」では、SQL * Plusクライアントを使用していません(言及しないと申し訳ありません)。SQL Developerを使用しています。おそらく、BEGIN/ENDブロック以外の部分は、その特定のクライアントを使用していなくても「SqlPlus」とみなされます。明確にすることはできますか?私がPCに戻ったときにあなたの解決策を試してみましょう。 – AaronLS

+2

@AaronLS - SQL * Plusに適用されるほとんどのものは、SQL Developerにも適用されます。これは確かにあります。 –

0

を見てみましょう:

declare 
    somedate date; 
Begin 
    select c.some_timestamp into somedate 
    from someschema.sometable c 
    where c.someid = &someid ; 
    dbms_output.put_line(somedate); 
end; 
/

明らかにスクリプトを実行する前に、SERVEROUTPUTを有効にする必要がありますが、文字列から常にキャストする必要なく、somedateを日付として扱うことができます。


最終的には、あなたがしようとしていることの詳細になります。私は最近、SQL * Plusのスクリプトと対話的に作業することはめったにないことを知っています。IDEワークシートを使用して開発した後、シェル・プログラムによって自律的に実行されます。あなたはSQL Developerを使用していると言いますから、おそらく同じ旅路にいるでしょう。

+0

ありがとうございます。私がやろうとしていることの一つの重要な点は、「BEGIN/ENDの開始時に宣言するのではなく、変数を使用しています。 dbms_outputまたはカーソルを使用すると、すぐに退屈になります。 – AaronLS

関連する問題