簡體   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