coe*_*e57 2 sql oracle coldfusion coldfusion-11
我在使用Coldfusion的Oracle数据库中使用datetime字段时遇到问题,并且不知道如何解决它.
我有一个表(主题),其中包含一个日期时间字段("MODIFIED").如果我查看日期,我会获得04-JAN-17.如果我这样查询:
select to_char(MODIFIED, 'DD-MM-YYYY HH24:MI:SS') from Subject
它返回:
04-01-2017 09:57:43
我可以在ColdFusion中检索相同的结果.
然后,如果"MODIFIED"值已更改,我尝试将该数据复制到具有相同结构的另一个表.为此,我在第一个查询中检索数据并将其插入新表中.正确检索数据.特别是日期(我可以在ColdFusion脚本中看到它).但是,日期的时间丢失了.例如,我获得04-01-2017 00:00:00而不是04-01-2017 09:57:43.
这是我的脚本的相关部分:
主页:
<!-------- Get data -------->
<cfquery name="select_Subject_to_insert" datasource="#application.datasource#">
SELECT CODE, MODIFIED, NAME FROM Subject
</query>
<cfloop query="select_Subject_to_insert">
<!-------- Create an object "Subject" -------->
<cfscript>
subject_to_insert = createObject("component", "Subject").init();
subject_to_insert.id = -1;
subject_to_insert.Code = select_Subject_to_insert.CODE;
subject_to_insert.modified = select_Subject_to_insert.MODIFIED;
subject_to_insert.name = select_Subject_to_insert.NAME;
</cfscript>
<!-------- Call the function for saving data -------->
saveSubject(subject_to_insert)
</cfloop>
Run Code Online (Sandbox Code Playgroud)
主要成分:
<!--- Function to save (update) Subject. --->
<cffunction name="saveSubject" returntype="string" access="remote">
<cfargument name="subject" required="yes" type="vo.Subject" />
<cfset var timestp = createTimeStamp() />
<!--- insert --->
<cfquery name="insertSubject" datasource="#application.datasource#" result="insertSubjectResult">
insert into Subject (
CODE,
MODIFIED,
NAME
TIMESTAMP
)values (
<cfqueryparam value="#arguments.subject.CODE#" null="no" cfsqltype="cf_sql_varchar"/>,
<cfqueryparam value="#arguments.subject.MODIFIED#" null="no" cfsqltype="cf_sql_date"/>,
<cfqueryparam value="#arguments.subject.NAME#" null="no" cfsqltype="cf_sql_varchar"/>,
<cfqueryparam value="#timestp#" null="no" cfsqltype="cf_sql_numeric"/>
)
</cfquery>
........................................
</cffunction>
Run Code Online (Sandbox Code Playgroud)
你能帮我理解为什么没有正确插入时间并解决问题吗?
你想用:
<cfqueryparam value="#arguments.subject.MODIFIED#" null="no" cfsqltype="cf_sql_timestamp"/>
Run Code Online (Sandbox Code Playgroud)
该cf_sql_date类型没有时间组件,cf_sql_timestamp但确实如此.您可以检查文档中的兼容性矩阵,以查看cf_sql_timestamp与Oracle DATE数据类型相对应的内容.
您还可以简化页面以摆脱函数调用(假设它没有进行额外处理):
<cfquery name="insertSubject" datasource="#application.datasource#" result="insertSubjectResult">
insert into Subject (
CODE,
MODIFIED,
NAME
TIMESTAMP
)
SELECT code,
modified,
name,
<cfqueryparam value=createTimeStamp() null="no" cfsqltype="cf_sql_numeric"/>
FROM subject
-- WHERE some_condition
</cfquery>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
119 次 |
| 最近记录: |