如果你想直接访问全局变量,你可以创建一个存储过程。在执行此操作之前,您应该考虑安全隐患 - 它会将全局数据公开给任何具有ODBC访问权限的人。
下面是一个存储过程的示例,该存储过程返回最多9个全局下标的值以及该节点的值。如果需要,您可以很容易地修改它。
Query OneGlobal(GlobalName As %String) As %Query(ROWSPEC = "NodeValue:%String,Sub1:%String,Sub2:%String,Sub3:%String,Sub4:%String,Sub5:%String,Sub6:%String,Sub7:%String,Sub8:%String,Sub9:%String") [SqlProc]
{
}
ClassMethod OneGlobalExecute(ByRef qHandle As %Binary, GlobalName As %String) As %Status
{
S qHandle="^"_GlobalName
Quit $$$OK
}
ClassMethod OneGlobalClose(ByRef qHandle As %Binary) As %Status [ PlaceAfter = OneGlobalExecute ]
{
Quit $$$OK
}
ClassMethod OneGlobalFetch(ByRef qHandle As %Binary, ByRef Row As %List, ByRef AtEnd As %Integer = 0) As %Status [ PlaceAfter = OneGlobalExecute ]
{
S Q=qHandle
S Q=$Q(@Q) b
I Q="" S Row="",AtEnd=1 Q $$$OK
S Depth=$QL(Q)
S $LI(Row,1)=$G(@Q)
F I=1:1:Depth S $LI(Row,I+1)=$QS(Q,I)
F I=Depth+1:1:9 S $LI(Row,I+1)=""
S AtEnd=0
S qHandle=Q
Quit $$$OK
}
我没有代码,供您访问得到这个,但作为参考,从蟒蛇访问此您可以使用(与pyodbc):
import pyodbc
import win32com.client
import urllib2
class CacheOdbcClient:
connectionString="DSN=MYCACHEDSN"
def __init__(self):
pass
def getGlobalAsOverlyLargeList(self):
connection=pyodbc.connect(self.connectionString)
cursor=connection.cursor()
cursor.execute("call MyPackageName.MyClassName_OneGlobal ?","MYGLOBAL")
list=[]
for row in cursor :
list.append((row.NodeValue,row.Sub1,row.Sub2,row.Sub3,row.Sub4,row.Sub5,row.Sub6,row.Sub7,row.Sub8,row.Sub9))
return list
来源
2012-03-17 03:28:03
psr
当我去管理Portal并查看Samples命名空间我可以看到发送给我们的数据库中的所有全局变量。我甚至可以点击查看并查看数据。但是,当我尝试使用ODBC将它导出到访问数据库或sql服务器数据库时,没有任何表显示出来...... – 2012-02-24 14:31:36
Mat-当在SMP中时,导航到包含新数据库的名称空间的SQL> Schema页面。您是否看到任何表示您在全局变量中查看的数据的模式/表格?我认为Stephen是正确的,因为您需要将全局数据中的数据连接到缓存持久化类,以便通过ODBC连接使其可见。 – mccrackend 2012-02-24 18:25:09
当我转到SQL> Schemas并使用新数据库进入命名空间时,那里什么也没有。 所以你说的是它在缓存中是可见的,因为它知道它自己的存储数据的方法,而ODBC不知道,除非我让它成为一个缓存持久化类?就像我说的那样,这是我第一次使用这个系统。 – 2012-02-24 20:56:05