繁体   English   中英

SQL和IBMDASQL

[英]SQL and IBMDASQL

我正在尝试查询一组文件。 在15个查询中,我要查询3个返回错误:消息7314,级别16,状态1,行1链接服务器“此处的服务器名”的OLE DB提供程序“ IBMDASQL”不包含表“ system”。 lib.file”。 该表不存在,或者当前用户对该表没有权限。

我正在使用SQL,并使用IBMDASQL驱动程序制作了链接服务器。

就像我说的那样,15个文件中有3个仅给我这个问题。

当我对文件执行wrkobj时,我看到public具有所有权限,并且我添加了特定的用户帐户以防万一。

当我使用基本的ODBC和Microsoft查询进行连接时,我什至看不到列表中的文件。 当我直接登录到iSeries时,我可以看到并操纵文件。

现在使用备用文件名。 但是出现插入错误。 根据要求,下面是代码,然后在确切的错误下面。

INSERT INTO [PARKWAY-TRAIN].S60017.ORDERF912.NC_NURS_ORD_REF 
(RECORD_ID, NURSING_ORDER_CD, ORDER_DESCRIPTION, LONG_DESCRIPTION, ORDER_TYPE, FREQUENCY_CD, FREQ_PM_MAINT, NOTE_REQUIRED_STS, NOTE_TEMPLATE, TPL_STATUS, FORM_ID, PARAMETER_ID, COSIG_REQ)
SELECT STND.RECORD_ID, STND.NURSING_ORDER_CD, STND.ORDER_DESCRIPTION, STND.LONG_DESCRIPTION, STND.ORDER_TYPE, STND.FREQUENCY_CD, STND.FREQ_PM_MAINT, STND.NOTE_REQUIRED_STS, STND.NOTE_TEMPLATE, STND.TPL_STATUS, STND.FORM_ID, STND.PARAMETER_ID, STND.COSIG_REQ
FROM [MODEL2].TNICLN2.ORDERF143.NC_NURS_ORD_REF STND
WHERE STND.RECORD_ID <> 'D' AND NOT EXISTS (SELECT HOSP.NURSING_ORDER_CD FROM [PARKWAY-TRAIN].S60017.ORDERF912.NC_NURS_ORD_REF HOSP WHERE HOSP.NURSING_ORDER_CD = STND.NURSING_ORDER_CD)

错误消息:链接服务器“ PARKWAY-TRAIN”的OLE DB提供程序“ IBMDASQL”返回了消息“ SQL0104:令牌。无效。有效令牌:。原因...:在令牌..令牌上检测到语法错误。不是有效的令牌。部分有效令牌是。该列表假定该语句在令牌之前是正确的。该错误可能早于该语句,但该语句的语法对此有效。 point。Recovery ...:执行以下一项或多项操作,然后重试该请求:-验证令牌区域中的SQL语句..更正该语句,该错误可能是缺少逗号或引号引起的。可能是拼写错误的单词,或者可能与子句的顺序有关。-如果错误标记为,请更正SQL语句,因为它的结尾不是有效的子句。” 消息7343,级别16,状态2,行1链接服务器“ PARKWAY-TRAIN”的OLE DB提供程序“ IBMDASQL”无法插入表“ [PARKWAY-TRAIN]”。[S60017]。[ORDERF912]。[NC_NURS_ORD_REF]” 。

如果仅运行代码的“选择”部分,则会得到准确的返回503行。 它仅在我插入代码的插入部分时失败。

IBM说要更正令牌。 我不知道哪个令牌是错误的。

“找不到表格”错误非常可疑。 使用STRSQL:

select table_name, table_schema, 
base_table_name, base_table_schema, base_table_member, 
system_table_name, system_table_schema 
from systables 
where table_name = 'NC_NURS_ORD_REF'

检查以确保库ORDERF912中名为NC_NURS_ORD_REF的表确实与库ORDERF912中的系统表名称NCORDER关联。

语法错误同样可疑。 鉴于这是一个跨系统查询,我怀疑您是否可以从IBM i STRSQL命令按原样运行它。 这将意味着在i端设置了正确的多系统数据库配置。

我发现有人遇到类似的问题,并且看起来像是在Microsoft方面: http : //bytes.com/topic/db2/answers/447753-error-inserting-into-iseries-db2-table-long-name-via -sql-server-2000-linked-server我认为他的解决方法是使用OPENQUERY()表单。

您绝对可以在IBM i方面检查的一件事是,是否为ORDERF912.NC_NURS_ORD_REF打开了日记功能。 这很重要,因为您需要使用正确的提交级别。 获取针对SYSTABLES的上一个查询的结果,并使用SYSTEM_TABLE_NAME进行DSPFD。 查找文本“文件当前已记录”。 如果该表未记录日志,则有多种选择。 最好的选择是开始记录文件,但如果不可用,请尝试INSERT ... WITH NC。 或在驱动程序处关闭承诺控制。

另外,请查看以下IBM技术说明,以确保正确设置了链接服务器: http ://www-01.ibm.com/support/docview.wss?uid=nas8N1014514

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM