JDBC检索外键列名称(sybase ase)

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 : '

我试图用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  : '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)
)应该可以帮助您克服这一困难。。。不过你要注意其他的差异