JDBC检索外键列名称(sybase ase)
我试图用JDBC元数据检索给定表的FK。 为此,我使用了“getImportedKeys”函数 对于我的表“现金管理策略”,它给出了结果集:JDBC检索外键列名称(sybase ase),jdbc,foreign-keys,sap-ase,Jdbc,Foreign Keys,Sap Ase,我试图用JDBC元数据检索给定表的FK。 为此,我使用了“getImportedKeys”函数 对于我的表“现金管理策略”,它给出了结果集: PKTABLE_CAT : 'HAWK' PKTABLE_SCHEM : 'dbo' PKTABLE_NAME : 'fx_execution_strategy_policy' PKCOLUMN_NAME : 'fx_execution_strategy_policy_id' FKTABLE_CAT : 'HAWK' FKTABLE_SCHEM : '
PKTABLE_CAT : 'HAWK'
PKTABLE_SCHEM : 'dbo'
PKTABLE_NAME : 'fx_execution_strategy_policy'
PKCOLUMN_NAME : 'fx_execution_strategy_policy_id'
FKTABLE_CAT : 'HAWK'
FKTABLE_SCHEM : 'dbo'
FKTABLE_NAME : 'cash_mgt_strategy'
FKCOLUMN_NAME : 'fx_est_execution_strategy_policy'
KEY_SEQ : '1'
UPDATE_RULE : '1'
DELETE_RULE : '1'
FK_NAME : 'fk_fx_est_execution_strategy_policy'
PK_NAME : 'cash_mgt_s_1283127861'
DEFERRABILITY : '7'
问题是“FKCOLUMN_NAME:'fx_est_execution_strategy_policy'”不是我表中的真实列,但它似乎被截断了?(末尾缺少“_id”)
使用官方Sybase sql客户端(Sybase Workspace)时,显示该约束/外键的表的DDL:
ALTER TABLE dbo.cash_mgt_strategy ADD CONSTRAINT fk_fx_est_execution_strategy_policy FOREIGN KEY (fx_est_execution_strategy_policy_id)
REFERENCES HAWK.dbo.fx_execution_strategy_policy (fx_execution_strategy_policy_id)
所以我想知道如何检索完整的FKU列名
请注意,我使用的是JConnect6.0。
我已经用jconnect 7.0测试过了,同样的问题
谢谢好的,我在我的数据库服务器上做了一些搜索,找到了存储过程sp\u jdbc\u importkey的代码。在此代码中可以看到:
create table #jfkey_res(
PKTABLE_CAT varchar(32) null,
PKTABLE_SCHEM varchar(32) null,
PKTABLE_NAME varchar(257) null,
PKCOLUMN_NAME varchar(257) null,
FKTABLE_CAT varchar(32) null,
FKTABLE_SCHEM varchar(32) null,
FKTABLE_NAME varchar(257) null,
FKCOLUMN_NAME varchar(257) null,
KEY_SEQ smallint,
UPDATE_RULE smallint,
DELETE_RULE smallint,
FK_NAME varchar(257),
PK_NAME varchar(257) null)
create table #jpkeys(seq int, keys varchar(32) null)
create table #jfkeys(seq int, keys varchar(32) null)
用于存储列名(对于PK和FK)的临时表#jpkeys和#jfkeys使用varchar(32)而不是257
现在需要搜索如何修补/更新这些存储过程。您尚未提供ASE版本,因此我将假设以下情况:
- dataserver在某个点运行ASE 12.x(描述符名称限制为30个字符)
- dataserver已升级到ASE 15.x/16.x(描述符名称扩展到255个字符)
- 在升级到ASE 15.x/16.x后,DBA未能升级/更新sp_jdbc*程序(因此旧ASE 12.x版本的程序-描述符限制为30个字符-仍在数据服务器中使用)
sp_version
应显示在数据服务器中运行的jdbc进程的旧版本
(显而易见的)解决方案是让DBA加载jdbc存储过程的最新版本(通常在${SYBASE}/jConnect*/sp下)
注意:让DBA检查
sp_version
的输出以查看是否有任何其他需要加载的升级脚本(例如,installmodel
,installsecurity
,installcommit
,等等)可能不会有什么坏处。注意,我已经使用PK表上的“getExportedKeys”测试了符号方式。。。但是它给出了完全相同的结果/问题;也就是30。但真正奇怪的是,当我使用“getColumns()”函数检索表中的列时,我成功地检索到了整个名称“fx\u est\u execution\u strategy\u policy\u id”。这里检索到的名称是“fx\u est\u execution\u strategy\u policy”,长度为33个字符,而不是30个字符。关于从12到16的迁移,您是对的。sp_版本结果包含9行,8行表示16.0 SP2;1请参阅jdbc 1004的jconnect。这9行处于“完成”状态。我已经写信给DBA检查这个bug并修补jdbc存储过程。希望我能在几个月内得到补丁…:/谢谢你的回答。看起来我说错了。。。查看ASE 16.0 SP02 PL04附带的存储过程。。。#jfkeys
/#jpkeys
表中的键
列仍然编码为varchar(32)
;除非ASE 16.0 SP03代码行已修复,否则您需要与技术支持一起打开一个案例,以获得永久修复;同时,快速编辑proc和/或install脚本(将键
列更改为varchar(257)
)应该可以帮助您克服这一困难。。。不过你要注意其他的差异