如果你想直接訪問全局變量,你可以創建一個存儲過程。在執行此操作之前,您應該考慮安全隱患 - 它會將全局數據公開給任何具有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