【问题标题】:How do I execute a sql statement in lotusscript if the table has a timestamp field/column?如果表有时间戳字段/列,如何在 lotusscript 中执行 sql 语句?
【发布时间】:2012-07-25 04:15:18
【问题描述】:

我正在努力将数据从 oracle 9i 检索到 lotus notes。我正在使用 Oracle 10g 进行测试,因为这就是我所拥有的。在默认 HR 数据库中,有一个 EMPLOYEES 表。我最近添加了一个新列来获取最后修改的时间戳,这是成功的。数据格式如下:25-JUL-12 10.28.32.000000 AM

以下是我的lotusscript代码:

Option Public
Option Declare

UseLSX "*lsxlc"

%Include "lsconst.lss"

Sub Initialize
    Dim s As New NotesSession, db As NotesDatabase
    Set db=s.Currentdatabase

    Dim lcs As New Lcsession
    lcs.Clearstatus

    Dim conUser As New Lcconnection("Oracle")
    Dim staffdoc As NotesDocument
    Dim fieldlistuser$
    fieldlistuser="EMPLOYEE_ID,FIRST_NAME,MODIFIED_AT"

    conUser.Server="localhost"
    conUser.UserID="hr"
    conUser.Password="hr"
    conUser.Connect
    conUser.MetaData="HR.EMPLOYEES"
    conUser.Fieldnames=fieldlistuser

    Dim fieldsUser As New LCFieldList
    Dim fieldUser As LCField
    Call conUser.Execute("Select * From HR.EMPLOYEES", fieldsUser)

    While conUser.Fetch(fieldsUser) > 0
        Set staffdoc=New NotesDocument(db)
        staffdoc.Form="Staff"
        staffdoc.StaffID=fieldsUser.EMPLOYEE_ID(0)
        staffdoc.StaffName=fieldsUser.FIRST_NAME(0)
        staffdoc.DateJoin=fieldsUser.MODIFIED_AT(0)
        Call staffdoc.Save(True, True)
    Wend
    conUser.Disconnect
End Sub

在我在 EMPLOYEES 表中添加时间戳列之前一切正常,我可以将每一行导出到临时 Lotus 视图。现在错误总是停在Call conUser.Execute("Select * From HR.EMPLOYEES", fieldsUser)。我认为这与fieldlistuser="EMPLOYEE_ID,FIRST_NAME,MODIFIED_AT" 行有关,因此我从中删除了MODIFIED_AT 并评论了staffdoc.DateJoin=fieldsUser.MODIFIED_AT(0),但错误仍然存​​在。错误是Error: Invalid data type for field 'MODIFIED_AT', Connector'Oracle', Method -Execute-。这真的可以做到吗?如果可以,我应该在 lotus 中存储什么数据类型的时间戳值?

【问题讨论】:

  • 看起来帮助文档说它将 DateTime 值作为变体处理。我认为在使用扩展语法来分配值时这并不重要,但是将 MODIFIED_AT 保存到变体中是否有帮助?
  • 另外,由于Notes中的DateTimes是数组,指定MODIFIED_AT的索引是否会产生问题?使用 fieldsUser.GetField 或 fieldsUser.Lookup 效果更好吗?还是在执行时出现错误?
  • 执行时出现错误,所以我猜不知道指定 MODIFIED_AT 的索引是否会产生问题。

标签: oracle timestamp lotus-notes lotusscript


【解决方案1】:

我的第一个想法是 select 语句在服务器上工作正常吗?

假设确实如此,这看起来像是驱动程序将时间戳转换为 Lotus Notes 日期时间字段的问题。作为一种解决方法,您可以创建一个存储过程,将“修改时间”作为日期时间而不是时间戳类型返回。

【讨论】:

  • 我还没有在服务器上测试过。只在本地工作。我已将 modified_at 的数据类型更改为 Date 而不是 Timestamp 并且它有效,但是我必须将日期格式化/转换为我想要的格式(如时间戳),我可能会丢失精度。到目前为止,如果可以接受,我将与我的老板讨论。无论如何,我在 Lotus Notes 帮助中搜索“Oracle 连接器属性”时发现了 LCTOKEN_STAMPFIELD,但不知道它是否有任何用途以及如何使用它。有人吗?
【解决方案2】:

只是查看帮助文档,我想知道大写是否重要,因为我看到列出的 LCConnection 属性是 FieldNames,而不是 Fieldnames。

【讨论】:

  • 我尝试将 Fieldnames 更改为 FieldNames 并使用工作示例进行验证,但一切似乎都正常。顺便说一下,LotusScript 大部分时间都不区分大小写。
  • 虽然我知道 LS 不区分大小写,但我不确定它是否通过这种方式传递属性。总是值得一试!
猜你喜欢
  • 2015-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多