Una rutina de Caché (Mumps):
SYSQL(par,ind,xec,ret) ;*** Lectura Global ***
N c,dir,exi,g1,g2,glo,i,ini,n,nin,nit,ok,pin
I $G(par)="" Q ""
S ind=$G(ind)
S xec=$G(xec)
S ret=$G(ret,"glo")
D VAR
D LEC
G FIN
;
LEC ;===== Lectura =====
S exi=""
I dir=0 S exi=$D(@glo),reg="",glo=$ZR,reg=$G(@glo) Q
F S glo=$Q(@glo,dir) Q:glo="" D I ok Q
. I $QL(glo)'=nit Q
. I $E(glo,1,$L(g1))'=g1 S ok=1,glo="" Q
. I $E($RE(glo),1,$L(g2))'=$RE(g2) Q
. D DAT
. X xec
Q
;
DAT ;===== Datos =====
S ok=1
S ind="" F i=1:1:nin S $P(ind,S,i)=$QS(glo,pin+i-1)
S reg=$G(@glo)
Q
;
VAR ;===== Variables =====
S ok=0
S glo=$P(par,P,1)
S nin=$P(par,P,2) I nin="" S nin=1
S dir=$P(par,P,3) I dir="" S dir=1
S nit=$L(glo,",")+nin-1
;
S i=$G(@($P(glo,"*",1)_$C(34)_$C(0)_$C(34)_$P(glo,"*",2)))
S i=$ZR
S g1=$P(i,$C(34)_$C(0),1)
S g2=$P(i,$C(0)_$C(34),2)
;
S ini="" F n=1:1:nin S i=$P(ind,S,n) Q:i="" D
. S c=$S($E(i)=$C(34):"",1:$C(34))
. S $P(ini,",",n)=c_i_c
I ini="" S ini=""""""
S glo=g1_$S($L(ini,",")=nin:ini_g2,ini="":""""")",1:ini_")")
;
; Cálculo Posición 1er. Indice Variable (*)
S i=$G(@(g1_0_")"))
S pin=$QL($ZR)
;
Q
;
FIN ;===== Final =====
I glo="" S (ind,reg)=""
F i=1:1:$L(ret,";") S $P(ret,";",i)=@($P(ret,";",i))
Q ret
;
HLP ;=================================================
; par = parámetros:
; Global|NumInd|Direc.
; ind = indice(s) inicial(s) (#)
; xec = xecute por lectura
; ret = variables a devolver (;)
; exi = existencia nodo (0/1)
; glo = global leído
; ind = indices buscados
; reg = registro leído
; nin = nº indices variables (*)
; nit = nº indices totales
; pin = posición ($QS) 1er. indice variable
;=================================================