PowerBuilder(PB)和Oracle分別是前端開發工具和RDBMS的主流產品PB提供了兩種與Oracle連接的接口PowerSoft內置的數據庫接口(Native Database Interface)和ODBC接口
PowerBuilder與Oracle的連接
假定已安裝Oracle客戶端應用程序可用Sqlplus或Tnsping等是否能連接到Oracle數據庫確定在SQL*NET配置文件中使用的數據庫別名(Database Alias又稱服務器名Server Name)如有疑問可在Oracle客戶端程序目錄下tnsnameora文件中找到另外保證搜索路徑已包括SQL*NET應用程序的安裝目錄(如C:\ORAWIN\BIN)
進入PB的Database Profiles畫筆可看到所有已安裝的數據庫接口(PB 缺省安裝的是Oracle 版的接口如使用低版本的Oracle需在安裝時指定)選擇O Oracle 點擊New按鈕進入Database Profile Setup對話框在Connection頁輸入下列信息Profile Name:為該Database Profile起一個有意義的名稱Server:@TNS:ServerName其中ServerName為上述數據庫別名(服務器名)如@TNS:ORA;注意PB 則沒有前面那個@TNS:!!!
Login ID:Oracle數據庫中實際的用戶名由於PB初次連接到數據庫時要自動建立五個系統表(PowerBuilder Catalog Table:PBCATTBLPBCATCOLPBCATEDTPBCATFMTPBCATVLD存儲表的擴展屬性)因此第一個連接到Oracle的用戶必須具有建表給PUBLIC角色授權等權限例如可用SYSTEM用戶進行第一次連接此後的連接對用戶則無特殊要求
Password:該用戶的口令
設置上述內容後即可連上Oracle為優化數據庫連接還可設置下列選項
Prompt for Database Information:連接時是否提示用戶輸入用戶名和口令
Generate Trace:啟動DB跟蹤工具跟蹤連接
Thread Safe:開發需要多線程環境支持的分布式應用時選擇該項缺省為未選適用於非分布應用
PBDBMS:與存儲過程調用方式有關的參數Oracle為或更高版本時清除該選項此時帶IN OUT參數的存儲過程可作為數據窗口數據源版本以下選擇該項調用PBDBMSPutLine建立存儲過程的SQL語句缺省是選中
Commit on Disconnect:斷開連接時指定提交或回退未提交的事務
Case Sensitive:連接的Oracle服務器是否區分大小寫注意該項選中時所有主鍵包含主鍵的表名外鍵須全為大寫字符
PowerBuilder Catalog Tables Owner:指定擁有PB系統表的用戶缺省為SYSTEM如果要使用多種顯示格式或有效性規則可以在不同的用戶下建立幾套系統表
Table Criteria:指定滿足哪些條件的表視圖和同義詞可在Select Tables對話框中顯示出來例如DEV用戶下銷售子系統的表都以SALE開頭則可以用SALE%DEVTABLEVIEW指定只顯示DEV用戶以SALE開頭的表和視圖
Asynchronous:選擇該項可在一個復雜的SQL語句執行過程中返回第一行結果前切換到其他操作
Number of Seconds to Wait:若上一項選中還可進一步通過該項指定檢索數據時等待數據庫響應的時間
Retrieve Blocking Factor:決定數據窗口對象一次可從數據庫取出的記錄數
Number of SQL Staments Cached:PB可將數據窗口對象產生的SQL語句和嵌入式SQL語句保存在SQL語句緩沖區該參數指定緩沖區為PB保留的SQL語句數目該數值可由下式計算SQLCache=服務器OPENCURSORS數(保留的游標數)本連接預期使用的最大游標數
Disable Bind:指定是否將輸入變量與SQL語句綁定此參數影響PB為數據窗口對象生成INSERT語句的方式
Static Bind:數據窗口對象檢索數據前是否檢測SELECT語句的合法性
在Syntax頁還可指定日期時間的格式等在Preview頁可查看Database Profile設置對應的PowerScript寫法
Oracle存儲過程的使用
歸納起來PB 中調用Oracle存儲過程有以下四種方法
方法一以關鍵字RPCFUNC聲明存儲過程
方法二以DECLARE PROCEDURE語句聲明存儲過程
方法三以動態SQL語句實現
方法四調用函數PBDBMSPutLine
一般情況下方法一能得到較好的運行效率和更完善的功能因此推薦使用方法一但是某些類型的存儲過程只能使用其他方法以下重點介紹方法一和方法二
兩種方法比較起來有以下幾點主要區別
)方法一適用於具有INOUT和IN OUT參數的存儲過程而方法二僅支持IN和OUT參數不支持IN OUT參數
)方法一對參數的數目無限制方法二最多支持個參數
)方法一不支持記錄(Recorder)的傳遞方法二可傳遞和接收記錄
方法一操作步驟
)在用戶對象畫筆中創建一個ClassStandard類型的從Transaction繼承的用戶對象
)在此用戶對象中聲明Local External Functions將存儲過程以RPCFUNC關鍵字聲明為外部函數在Declare Local External Functions對話框中按Procedures按鈕選擇要調用的後台存儲過程或直接輸入類似subroutine TEST(long idref string name)RPCFUNC ALIAS FOR DEVTEST的語句例如DEVTEST的參數為(id IN NUMBERname IN OUT VARCHAR)
)保存該用戶對象
)在Application畫筆中進入應用屬性對話框在Variable Types頁將上Transaction用戶對象設置為缺省的全局變量SQLCA
)腳本中編碼調用相應的外部函數形式SQLCA函數名(參數)如可用SQLCATEST(lnidlsname)調用例子中定義的DEVTEST存儲過程其中lnidlsname為調用參數
方法一注意事項
)由於PB中String類型的數據長度是動態分配的因此對Ref String類型的參數每次調用前需要申請足夠的空間例如上例從輸入的id值檢索name後台聲明的NAME數據類型為VARCHAR()每次調用SQLCATEST前需要用lsname=SPACE()置lsname為足夠長度的空串
[] []
From:http://tw.wingwit.com/Article/program/PB/201311/24641.html