我在oracle中有一个程序:
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 客户端手动运行该过程,我仍然必须输入 05-apr-2013 并且只有这样才有效。如果我尝试,我无法输入时间,因为它会失败。
开始日期和结束日期是 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