Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 应用程序作为表的事实主键_Sql_Db2_Ibm Midrange_Db2 400 - Fatal编程技术网

Sql 应用程序作为表的事实主键

Sql 应用程序作为表的事实主键,sql,db2,ibm-midrange,db2-400,Sql,Db2,Ibm Midrange,Db2 400,尝试通过绿色屏幕(DSPDBR)或GUI(通过“显示相关”)查找相关对象。键控逻辑文件在GUI中显示为视图。因此,您需要查看属性以确定它们是否是唯一键控的DDS逻辑,而不是非键控的SQL视图 有几次我遇到了没有实际主键的表。通常,可以从现有列中找出什么可以定义为一 当真的没有PK时,我只需添加一个。通常是生成的标识列。您可以使用一种技术轻松添加列,而无需重新编译或测试任何遗留RPG/COBOL程序。(请注意LVLCHK(*否)不是吗!) 这项技术在《现代化红皮书》的第四章中有所阐述 1) 将数

尝试通过绿色屏幕(DSPDBR)或GUI(通过“显示相关”)查找相关对象。键控逻辑文件在GUI中显示为视图。因此,您需要查看属性以确定它们是否是唯一键控的DDS逻辑,而不是非键控的SQL视图

有几次我遇到了没有实际主键的表。通常,可以从现有列中找出什么可以定义为一

当真的没有PK时,我只需添加一个。通常是生成的标识列。您可以使用一种技术轻松添加列,而无需重新编译或测试任何遗留RPG/COBOL程序。(请注意LVLCHK(*否)不是吗!)

这项技术在《现代化红皮书》的第四章中有所阐述

1) 将数据移动到新的PF(或SQL表) 2) 使用现有PF的名称创建新LF 3) 将现有LF重新指向新PF(或SQL表)


如果操作正确,现有对象的记录格式标识符不会更改,因此您不必重新编译任何RPG/COBOL程序。

不,我们处理的大多数iSeries表都没有显式键。其中大多数是从第三方接收的原始文本文件翻译而来的,只是逐行追加到表中。我们的团队没有权力在没有巨大的繁文缛节障碍的情况下更改表。我理解繁文缛节是一个PITA,但作为专业人员,做正确的事情意味着我们必须处理它。不,我们处理的大多数iSeries表都没有显式键。其中大多数是从第三方接收的原始文本文件翻译而来的,只是逐行追加到表中。我们的团队没有权力在没有巨大的繁文缛节障碍的情况下更改表。我理解繁文缛节是一个PITA,但作为专业人员,做正确的事情意味着我们必须处理它。好的,因此,通过将查询设为子查询,RRN被转化,即使外部查询对内部子集没有任何其他作用。这可能是我应该预料到的。我通常会在一个只有4GB内存的小型515上,将一个16M行的表连接到一个800K行的表。您的查询来自何处,什么在使用结果?我通过ODBM调用从ASP.NET web服务器发送查询。我不确定内存问题是什么,但主表有超过2000万行。@DavidRTribble-那么可能是web服务器内存不足-它可能试图一次性获取整个结果集。在输出中有2000万行,你打算做什么?@Clockwork Muse-不,这就是我的问题所在,我的查询只返回一页(例如,30)行。内存错误确实发生在数据库服务器上,但我不知道为什么会发生在这样一个简单的查询中。好的,所以只要将一个查询作为子查询,RRN就会被转换,即使外部查询对内部子集没有任何其他作用。这可能是我应该预料到的。我通常会在一个只有4GB内存的小型515上,将一个16M行的表连接到一个800K行的表。您的查询来自何处,什么在使用结果?我通过ODBM调用从ASP.NET web服务器发送查询。我不确定内存问题是什么,但主表有超过2000万行。@DavidRTribble-那么可能是web服务器内存不足-它可能试图一次性获取整个结果集。在输出中有2000万行,你打算做什么?@Clockwork Muse-不,这就是我的问题所在,我的查询只返回一页(例如,30)行。内存错误确实发生在数据库服务器上,但我不知道为什么会发生这种简单的查询。
    select t.RRN2    -- Gives correct RRNs
    from (
      select row_number() over() as SEQ,
        rrn(e2) as RRN2, e2.*
      from TABLE1 as e2
      where e2.UPDATED between '2013-05-01' and '2013-05-31'
      order by e2.UPDATED, e2.ACCOUNT
    ) as t
    where t.SEQ > 270 and t.SEQ <= 300    -- Paging
    order by t.UPDATED, t.ACCOUNT
select rrn(e) as RRN, e.*
  from TABLE1 as e
  where rrn(e) in (
    select t.RRN2    -- Gives correct RRNs
    from (
      select row_number() over() as SEQ,
        rrn(e2) as RRN2, e2.*
      from TABLE1 as e2
      where e2.UPDATED between '2013-05-01' and '2013-05-31'
      order by e2.UPDATED, e2.ACCOUNT
    ) as t
    where t.SEQ > 270 and t.SEQ <= 300    -- Paging
    order by t.UPDATED, t.ACCOUNT
  )
  order by e.UPDATED, e.ACCOUNT