私はオラクルで手続きをしています:
CREATE OR REPLACE
PROCEDURE ONE
(
p_GUID IN ONE.GUID%TYPE,
p_START_DATE IN ONE.START_DATE%TYPE,
p_END_DATE IN ONE.END_DATE%TYPE,
p_RETURN OUT INTEGER
)
AS
BEGIN
INSERT INTO ONETABLE (GUID, START_DATE, END_DATE)
VALUES (p_GUID, to_date(p_START_DATE, 'YYYY-MM-DD HH24:MI:SS'), to_date(p_END_DATE, 'YYYY-MM-DD HH24:MI:SS'));
COMMIT;
EXCEPTION
WHEN OTHERS THEN
p_RETURN:= 1;
END;
編集、人々はこれを試すように言っているようです(これも機能しません。問題を解決するためにto_date(上記の例)を使用しようとしました):
CREATE OR REPLACE
PROCEDURE ONE
(
p_GUID IN ONE.GUID%TYPE,
p_START_DATE IN ONE.START_DATE%TYPE,
p_END_DATE IN ONE.END_DATE%TYPE,
p_RETURN OUT INTEGER
)
AS
BEGIN
INSERT INTO ONETABLE (GUID, START_DATE, END_DATE)
VALUES (p_GUID, p_START_DATE, p_END_DATE);
COMMIT;
EXCEPTION
WHEN OTHERS THEN
p_RETURN:= 1;
END;
C#から呼び出すと(たとえば、DateTime.NOWを使用して)-失敗します。
開始日と終了日が 2013 年 4 月 5 日の形式の場合にのみ機能するようです。しかし、入力だけでなく、そこに時間を取得するにはどうすればよいですか?
交換したら
p_START_DATE, 'YYYY-MM-DD HH24:MI:SS'
と
'2013-05-13 12:13:14', 'YYYY-MM-DD HH24:MI:SS'
これは機能しますが、c# からプロシージャを呼び出すと失敗します。
また、手動で db クライアントから手順を実行する場合でも、2013 年 4 月 5 日を入力する必要があり、それのみが機能します。時刻を入力しようとすると失敗して入力できません。
開始日と終了日は、Oracle db の DATE 型です。
--
何をしようとしているかに応じて、さまざまなメッセージが表示されます。
調べてみると、以下のことが関係しているようです。
SELECT value FROM v$nls_parameters WHERE parameter ='NLS_DATE_FORMAT';
どちらが返されますか:
DD-MON-RR
そして、データベースの所有者ではないので、それを変更することはできません。
--
では、そこに時間部分を取得する方法は?
完全な SQL は次のとおりです。
select parameter, value from nls_session_parameters;
どちらが返されますか:
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE AMERICAN
NLS_SORT BINARY
NLS_TIME_FORMAT HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY $
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE