0

PL / SQLでvarを日時として宣言できない理由と、その代替手段について知りたいです。Oracle11を使用しています。

VARIABLE some_date date;

また、変数の有効なタイプ、日付が含まれていないことを示す次のエラーメッセージが表示されます。

 Usage: VAR[IABLE] [ <variable> [ NUMBER | CHAR | CHAR
(n [CHAR|BYTE]) |
VARCHAR2 (n [CHAR|BYTE]) | NCHAR | NCHAR (n) |
NVARCHAR2 (n) | CLOB | NCLOB | REFCURSOR |
BINARY_FLOAT | BINARY_DOUBLE ] ]

おそらく、日付を文字列または長い表現としてシミュレートすることでこの問題を回避できますが、なぜそうなるのか本当に興味があります。

ありがとう

4

3 に答える 3

1

PL/SQL ではなく SQL*Plus を意味していると思いますよね?VARCHAR2PL/SQL コードで と を使用して、 と を使用して 2 つの間の変換をto_char()行うことができますto_date()

于 2012-10-31T16:46:22.403 に答える
0

variableキーワードで変数を宣言しないでください。必要なのは変数名とdeclareブロックのタイプだけで、残りはPL/SQLが処理します。

$DECLARE
$  some_date DATE;
$BEGIN
$  -- other code
$END;
于 2012-10-31T16:52:20.057 に答える
0

PL/SQL では、キーワードVARIABLEは文脈から外れています。バインド変数の作成に使用されます。バインド変数は、PL/SQL ブロックの宣言セクションではなく、環境で作成されます。PL/SQL ブロックで宣言された変数は、ブロックを実行するときにのみ使用できます。ブロックが実行された後、変数によって使用されたメモリは解放されます。ただし、ブロックが実行された後でもバインド変数にアクセスできます。したがって、バインド変数を作成すると、複数のサブプログラムで使用および操作できます。これらは、他の変数と同様に、SQL ステートメントおよび PL/SQL ブロックで使用できます。これらの変数は、PL/SQL サブプログラムとの間で実行時の値として渡すことができます。

たとえば、変数の場合:

VARIABLE b_result DATW
BEGIN
  SELECT JOIN_DATE INTO :b_result
  FROM employees WHERE employee_id = 144;
END;
/
PRINT b_result

私はあなたのために感じます、打撃は目的を果たします

DECLARE
  some_date DATE;
BEGIN
  -- other code
END;
于 2012-10-31T18:07:16.503 に答える