首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Intersystems caché- sqlStorage

Intersystems caché- sqlStorage
EN

Stack Overflow用户
提问于 2015-03-04 15:11:36
回答 2查看 368关注 0票数 1

我需要将全局映射到sql。我有这样的全球结构:

代码语言:javascript
复制
^myGlob("mltab","main","Dta",idRow,idCol,"Index")

具体而言:

代码语言:javascript
复制
^myGlob("mltab","main","Dta",3,1)   =   20
^myGlob("mltab","main","Dta",3,2)   =   30
^myGlob("mltab","main","Dta",3,2,"Index")   =   "t|1320|30|62913"
^myGlob("mltab","main","Dta",3,3)   =   "01.04.2013"
^myGlob("mltab","main","Dta",3,4)   =   36
^myGlob("mltab","main","Dta",3,5)   =   166.8
^myGlob("mltab","main","Dta",4,1)   =   20
^myGlob("mltab","main","Dta",4,2)   =   30
^myGlob("mltab","main","Dta",4,3)   =   "01.04.2013"
^myGlob("mltab","main","Dta",4,4)   =   36
^myGlob("mltab","main","Dta",4,4,"Index")   =   "nextIndexVal"
^myGlob("mltab","main","Dta",4,5)   =   166.8
                             .
                             .
                             .

"mltab""main""Dta""Index"是常数。idRow是我的主键,idCol对我来说并不重要,但是会给我带来问题,因为它可以改变。

我需要向某个表列(map类属性)获取类似于colId=2^index="t|1320|30|62913"值的内容。我映射的其他值。

我的当前代码如下:

代码语言:javascript
复制
Class Kza.NewClass1 Extends %Persistent [ Not ProcedureBlock, StorageStrategy = MySqlStorageStrategy ]
{

Property hyperlink As %String;

Property colId As %String;

Property id As %Integer;

Property prop1 As %String;

Property prop2 As %String;

Property prop3 As %String;

Property prop4 As %String;

Property prop5 As %String;

Index MyIndex1 On id [ IdKey, PrimaryKey, Unique ];

<Storage name="MySqlStorageStrategy">
<ExtentSize>100000</ExtentSize>
<SQLMap name="Map1">
<Global>^myGlob</Global>
<RowIdSpec name="1">
<Expression>{L2}</Expression>
<Field>id</Field>
</RowIdSpec>
<Subscript name="1">
<Expression>{id}</Expression>
</Subscript>
<Subscript name="2">
<Expression>{colId}</Expression>
</Subscript>
<Type>index</Type>
</SQLMap>
<SQLMap name="MyMasterMap">
<ConditionalWithHostVars></ConditionalWithHostVars>
<Data name="colId">
<Node>6</Node>
</Data>
<Data name="hyperlink">
<Node>"Index"</Node>
</Data>
<Data name="prop1">
<Node>1</Node>
</Data>
<Data name="prop2">
<Node>2</Node>
</Data>
<Data name="prop3">
<Node>3</Node>
</Data>
<Data name="prop4">
<Node>4</Node>
</Data>
<Data name="prop5">
<Node>5</Node>
</Data>
<Global>^myGlob</Global>
<RowIdSpec name="1">
<Expression>{L1}</Expression>
<Field>id</Field>
</RowIdSpec>
<Subscript name="1">
<Expression>"mltab"</Expression>
</Subscript>
<Subscript name="2">
<Expression>"main"</Expression>
</Subscript>
<Subscript name="3">
<Expression>"Dta"</Expression>
</Subscript>
<Subscript name="4">
<Expression>{id}</Expression>
</Subscript>
<Type>data</Type>
</SQLMap>
<StreamLocation>^Kza.testToTable1S</StreamLocation>
<Type>%CacheSQLStorage</Type>
</Storage>
}

我认为我的问题可能在于数据节点的定义:

代码语言:javascript
复制
<Data name="colId">
    <Node>6</Node>
</Data>
<Data name="hyperlink">
    <Node>"Index"</Node>
</Data>

但遗憾的是,我对这个问题还不够熟悉.那么,有人能帮助我在我的sql表中获得列hyperlink,其中的值为colId=2^index=t|1320|30|62913,行为3,colId=4^index=nextIndexVal为第4行?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-04 21:26:13

如果超链接属性的colId是固定的,您可以在可能的情况下使用标记RetrievalCode来编写一些COS代码,如果不是修复的话,您可以为colId编写一些东西,然后在下面这样做。

代码语言:javascript
复制
<Data name="hyperlink">
  <RetrievalCode> s {hyperlink}=$g(^myGlob("mltab","main","Dta",{L4},2,"Index"))
  </RetrievalCode>
</Data>

您的RowIdSpec可能错了,因为属性id在4级下标,所以您必须使用L4作为表达式。

代码语言:javascript
复制
<RowIdSpec name="1">
  <Expression>{L4}</Expression>
  <Field>id</Field>
</RowIdSpec>

和最新变体

代码语言:javascript
复制
<Data name="colId">
  <RetrievalCode>s {*}="" f { s {*}=$o(^myGlob({L1},{L2},{L3},{L4},{*})) quit:{*}=""  quit:$d(^myGlob({L1},{L2},{L3},{L4},{*},"Index"))}
  </RetrievalCode>
</Data>
<Data name="hyperlink">
  <RetrievalCode>s colId="" f { s colId=$o(^myGlob({L1},{L2},{L3},{L4},colId)) quit:colId=""  quit:$d(^myGlob({L1},{L2},{L3},{L4},colId,"Index"))}
s {*}=$g(^myGlob({L1},{L2},{L3},{L4},colId,"Index"))
  </RetrievalCode>
</Data>
<Data name="hyperlink2">
  <RetrievalCode>s colId="" f { s colId=$o(^myGlob({L1},{L2},{L3},{L4},colId)) quit:colId=""  quit:$d(^myGlob({L1},{L2},{L3},{L4},colId,"Index"))}
s {*}="colId="_colId_"^index="""_$g(^myGlob({L1},{L2},{L3},{L4},colId,"Index"))_""""
  </RetrievalCode>
</Data>
票数 2
EN

Stack Overflow用户

发布于 2015-03-05 12:13:23

SQLMap存储中的这段代码是这样做的:

代码语言:javascript
复制
<Data name="hyperlink">
<RetrievalCode>
<![CDATA[set res=""
    set colId=""
    for
    {
        set colId = $order( ^myGlob("mltab","main","Dta",{L4},colId) )
        quit:(colId = "")

        set indexTab = $g(^myGlob("mltab","main","Dta",{L4},colId,"Index"))
        if indexTab'="" {
            set res = res_"colId="_colId_"index="_indexTab
        }
    }
    s {hyperlink}=res]]></RetrievalCode>
</Data>

{L4}是行id,不需要多个SQLmap。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28857898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档