Caché数据库工作中总结

$zcvt转换函数--全名$ZCONVERT

//把w转换成C

w $zcvt("www.wocao.com","C")

s:$zcvt(type,"U")="Q"


XECUTE动态执行表达式

例子1

动态的打印一句话

 
  
XECUTE ("WRITE ""hello world"",!")

例子二:

执行1>3表达式获取结果

 (data) s data ="表达式",data--意思是 获取表达式的值赋值给data ,.data是需要返回一个表达式执行后的结果

XECUTE ("(data) s data="_1_>_3,.data)

例子三:

得到in输入的值+3赋值给out

 
  
 SET x=1
  XECUTE ("(in,out) { SET x=in+3 SET out=x }",x,.y)
  WRITE x     ; the value of x is 1

例子四:
动态的创建一个class并返回
XECUTE ("(data) s data=##class("_clazzName_"List).%New()",.data)

Cache调用存储过程
//获取平均日方法
action = $zcvt("GetAvgDay", "U")
{
//得到消息Body的头信息--头信息里面带有传入的参数
str= msg.body.Read()
//根据指定的规则拆分得到参数
DataSources = $p(str,"^",1)
code = $p(str,"^",2)
value = $p(str,"^",3)


//调用存储过程sql语句
sql="{call ODS_query_day(?)}"	



//这里i#的意思为:i的个数为参数的个数,#为清除缓存
//i# i一个参数 ii 两个参数 #清除缓存"
procrp =..Adapter.ExecuteProcedure(.rs,.pvalues,sql,"i#",value)

//判断SQL执行结果是否有错误
if $$$ISERR(procrp) {
rtnMsg.header.result="False"
rtnMsg.header.reason=##class(%SYSTEM.Status).GetErrorText(procrp)
rtnMsg.XMLExportToStream(.mess,"Message")
    pResponse.mess.CopyFrom(mess)
Quit $$$OK
}
//获取结果集
if $IsObject(rs) {
rstable=rs.GetAt(1)//获取结果集中第一个
rstable.Rewind()//初始化指针
while(rstable.Next()){
 brxm=rstable.Get("病人姓名")
  brxb=rstable.Get("病人性别")
  brnl=rstable.Get("病人年龄")
  ryrq=rstable.Get("入院日期")
  dqsj=rstable.Get("当前时间")
  zyh=rstable.Get("住院号")
  ysxm=rstable.Get("医生名称")
  ksmc=rstable.Get("科室名称")
  bch=rstable.Get("病床号")
  yzyts=rstable.Get("已住院天数")
  zfy=rstable.Get("总费用")
//把结果放入global
  ^MonitorResult(value,zyh)=brxm_"^"_brxb_"^"_brnl_"^"_zyh_"^"_ysxm_"^"_ksmc_"^"_bch_"^"_ryrq_"^"_dqsj_"^"_yzyts_"^"_zfy
}
}else {
..ExecLog(sql, "", "0")
}
rtnMsg.header.result="True"
rtnMsg.header.reason=""
pResponse.mess.CopyFrom(##class(%GlobalCharacterStream).%New())
Quit $$$OK
}




你可能感兴趣的:(Caché)