亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > Oracle > 正文

在Oracle/2000中調用Windows API函數

2024-08-29 13:50:38
字體:
來源:轉載
供稿:網友
OracleDeveloper/2000是Oracle的微機開發工具,由于它與Oracle數據庫的緊密連接,比用PowerBuilder或其它高級語言采用ODBC與Oracle的連接享有得天獨厚的優點,越來越在Windows95和WindowsNT平臺上得到廣泛應用,筆者在用其進行程序設計時感到,既然是在Windows平臺上開發程序,假如能在其中應用一些WindowsAPI函數,將使Developer/2000有如虎添翼的感覺,可以大大彌補它與底層操作系統的聯系能力差、控制實時硬件設備功能差的缺點,開發出集成性更好的應用程序。 所有用第三方語言編寫的子程序對Developer/2000都稱為外部函數,WindowsAPI函數也是外部函數。這些外部函數必須包含在一個動態庫中。例如WINDOWS操作系統下的動態鏈接庫或UNIX系統下的共享庫等。Developer/2000通過為每一個外部函數產生一個PL/SQL接口,它使用PL/SQL的語法,在程序中調用這一接口程序就可以激活這一外部函數。 對一個外部函數產生一個PL/SQL接口,需要用到內建軟件包ORA-FFI,它包含一些PL/SQL的子程序用來對外部函數生成PL/SQL接口,實際操作時可以用PRocedureBuilder產生一個程序庫,在程序庫中建立一個程序包(Package),在這個包中實現對外部函數建立連接。下面介紹這一過程的具體步驟: 1.初始化外部函數 就是說明包含外部函數的動態鏈接庫的位置,并從中分離出外部函數的原型,并將外部函數中主語言的數據類型和PL/SQL數據類型做一一對應的匹配。這是在包體(PackageBody)中進行的。具體分以下幾步: (1)用OQA_FFI.LOAD_LIBRARY得到包含外部函數的動態鏈接庫的庫柄,此時需提供動態鏈接庫的名字和位置。 (2)用ORA_FFI.REGISTER_FUNCTION得到外部函數的函數柄,這時需提供動態鏈接庫的庫柄和外部函數名。 (3)用ORA_FFI.REGISTER_PARAMETER來注冊外部函數的參數類型,對每一個參數都要提供它的外部函數柄和相應的PL/SQL數據類型。參數注冊的順序必須與它們出現在外部函數原型中的順序一致。 (4)用ORA_FFI.REGISTER_RETURN來注冊外部函數的返回值類型,這時需要提供它的外部函數柄和相應的PL/SQL數據類型。 2.將外部函數和一個PL/SQL子程序相關聯 一個和外部函數建立關聯的PL/SQL子程序,實際上指明了外部函數的內存地址,每次調用這個子程序,實際上是調用與它相對應的外部函數。具體步驟為: (1)用ORA_FFI.FIND_FUNCTION或ORA_FFI.REGISTER_FUNCTION得到一個函數柄。 (2)在PL/SQL包體的聲明部分,定義一個PL/SQL子程序,它的第一個參數是類型為ORA_FFI.FUNCHANDLETYPE,接下來是依次對應外部函數參數的PL/SQL數據類型的參數。 ?。?)在這個PL/SQL子程序中加入一個PRAGMA接口。PRAGMA聲明就是通過將控制轉到一個內存地址,來激活這個外部函數。3.生成一個模擬外部函數的原型的PL/SQL子程序。 這個子程序就是用戶可見的外部函數的PL/SQL接口,用戶按照它的參數類型和返回值類型來使用外部函數,具體步驟為: (1)在包體的聲明部分,定義一個PL/SQL子程序,它的參數和返回值是和外部函數對應的PL/SQL類型。這就是模擬外部函數原型的一個子程序。 (2)在這個子程序中調用與上步生成的與外部函數相關聯的PL/SQL子程序。 (3)在PL/SQL包的說明(PackageSpefication)部分,輸入這個PL/SQL子程序的原型。 下面是一個完整的為WindowsAPI函數winexec建立PL/SQL接口的例子:
    PACKAGEWinExecIS  FUNCTIONWinExec(ExecfileINVARCHAR2,  commandINPLS_INTEGER)  RETURNPLS_INTEGER;  END;/*在包說明部分,是模擬外部  函數原型的PL/SQL函數原型說明*/  PACKAGEBODYWinExecIS  lh_USERora_ffi.libHandleType;/*定義庫柄類型變量*/  fh_WinExecora_ffi.funcHandleType;/*定義函數柄類型變量*/    FUNCTIONi_WinExec(funcHandleINora_ffi.funcHandleType,  ExecfileINOUTVARCHAR2,  commandINPLS_INTEGER)  RETURNPLS_INTEGER;    PRAGMAINTERFACE(C,i_WinExec,11265);  /*步驟2將一個PL/SQL子程序與外部函數相關聯*/    FUNCTIONWinExec(ExecfileINVARCHAR2,  commandINPLS_INTEGER)  RETURNPLS_INTEGER  IS  execfile_lVARCHAR2(512):=Execfile;  rcPLS_INTEGER;  BEGIN  rc:=i_WinExec(fh_WinExec,  execfile_l,  command);    RETURN(rc);  END;  /*步驟3中PL/SQL模擬函數的定義,  它實際上就是調用步驟2中與外部函數建立關聯的那個函數*/  BEGIN  BEGIN  lh_USER:=ora_ffi.find_library('Kernel32.dll');  EXCEPTIONWHENora_ffi.FFI_ERRORTHEN  lh_USER:=ora_ffi.load_library(NULL,'kernel32.dll');  END;/*得到動態鏈接庫的庫柄*/    fh_WinExec:=ora_ffi.register_function  (lh_USER,'WinExec',ora_ffi.PASCAL_STD);  /*得到外部函數的函數柄*/  ora_ffi.register_parameter(fh_WinExec,  ORA_FFI.C_CHAR_PTR);/*參數注冊,原類型為LPCSTR*/  ora_ffi.register_parameter(fh_WinExec,  ORA_FFI.C_INT);/*參數注冊,原類型為UINT*/    ora_ffi.register_return(fh_WinExec,  ORA_FFI.C_INT);/*返回值注冊,原類型為BOOL*/    ENDWinExec;
   可以將多個外部函數的PL/SQL接口放在一個包內。要在Developer/2000的FormDesigner中使用這些外部函數,只要把包含這一程序包的程序庫(.PLL)附加進來,使用包名.函數名就可激活這個外部函數。 例如:WinExec.WinExec('c:/windows/notepad.exe',0) 具體WindowsAPI函數數據類型和PL/SQL數據類型的轉換可參照Developer/2000中ProcedureBuilder幫助文件中對ORA_FFI軟件包的具體介紹。


上一篇:Oracle數據庫最大可用性體系結構

下一篇:管理Oracle OLAP時清除通往OLAP的障礙

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
色综合久久悠悠| 992tv成人免费视频| 国产精品亚洲一区二区三区| 欧美黄色性视频| 欧美激情亚洲一区| 亚洲www永久成人夜色| 国产高清视频一区三区| 国产精品扒开腿做爽爽爽男男| 精品中文视频在线| 亚洲乱码一区av黑人高潮| 亚洲在线视频观看| 亚洲欧美国产制服动漫| 欧美极品美女视频网站在线观看免费| 久久人人爽人人爽人人片av高请| 日韩在线免费观看视频| 欧美国产中文字幕| 亚洲激情在线视频| 久久久国产影院| 国产精品女人久久久久久| 777777777亚洲妇女| 91高潮精品免费porn| 日韩av中文字幕在线播放| 国产精品国产福利国产秒拍| 日韩高清电影免费观看完整版| 亚洲一区精品电影| 性亚洲最疯狂xxxx高清| 欧美第一黄色网| 国产亚洲综合久久| 久久亚洲精品网站| 久久久久久国产精品美女| 久久久亚洲欧洲日产国码aⅴ| 欧美精品在线免费观看| 国产精品91久久久久久| 欧洲成人免费aa| 日韩大片在线观看视频| 成人妇女淫片aaaa视频| 国产精品视频26uuu| 国产成+人+综合+亚洲欧美丁香花| 日韩在线免费av| 欧美日产国产成人免费图片| 亚洲欧美激情视频| 精品国产999| 国产亚洲精品高潮| 亚洲精品少妇网址| 欧美精品成人91久久久久久久| 国产suv精品一区二区三区88区| 中文字幕日韩欧美在线视频| 午夜免费在线观看精品视频| 一区二区成人精品| 91中文字幕在线| 欧美人在线观看| 久久99国产精品自在自在app| 91香蕉国产在线观看| 久久精品国产亚洲精品2020| 亚洲成人黄色网址| 欧美激情一二区| 国产精品视频午夜| 在线成人一区二区| 日韩经典中文字幕| 91精品国产99久久久久久| 亚洲性av网站| 97精品伊人久久久大香线蕉| 亚洲情综合五月天| 欧美日韩国产丝袜另类| 1769国产精品| 日韩免费观看网站| 一区二区在线视频| 亚洲激情免费观看| 在线电影欧美日韩一区二区私密| 国产91精品青草社区| 亚洲天堂男人的天堂| 欧美在线性爱视频| 欧美成人四级hd版| 欧美一级黑人aaaaaaa做受| 久久久久久久久中文字幕| 日韩精品中文字幕在线| 亚洲伊人成综合成人网| 亚洲电影av在线| 97香蕉久久超级碰碰高清版| 亚洲欧美日韩一区二区三区在线| 亚洲美女av在线播放| 欧美极品少妇xxxxx| 国产精品久久久久久久久久99| 欧美在线免费视频| 国产噜噜噜噜噜久久久久久久久| 久久久久久久爱| 久久久极品av| 欧美性高跟鞋xxxxhd| 日韩在线高清视频| 精品国内产的精品视频在线观看| www.99久久热国产日韩欧美.com| 91精品在线影院| 国产日韩欧美在线| 欧美日韩精品在线播放| 中文字幕日韩欧美| 亚洲中国色老太| 中文字幕亚洲欧美日韩在线不卡| 美女精品久久久| 福利二区91精品bt7086| 91麻豆国产语对白在线观看| 国产69精品久久久久9| 日本精品免费观看| 亚洲欧美视频在线| 夜夜嗨av色综合久久久综合网| 免费不卡在线观看av| 亚洲一区二区三区久久| 亚洲视频专区在线| 亚洲色图av在线| 精品露脸国产偷人在视频| 操日韩av在线电影| 国产精品国产亚洲伊人久久| 精品久久久久久久久国产字幕| 日韩最新在线视频| 日韩电影免费在线观看中文字幕| 韩曰欧美视频免费观看| 疯狂蹂躏欧美一区二区精品| 91中文在线观看| 久久精品久久久久| 美女性感视频久久久| 欧美中文字幕在线| 亚洲福利在线播放| 日韩中文视频免费在线观看| 亚洲香蕉av在线一区二区三区| 亚洲成人a级网| 亚洲国产欧美日韩精品| 91精品久久久久久| 亚洲精品国产福利| 国产精品视频自在线| 最近2019年日本中文免费字幕| 久久在线免费观看视频| 九九综合九九综合| 欧美成人精品激情在线观看| 国内外成人免费激情在线视频| 日韩视频在线一区| 精品中文字幕在线观看| 日韩在线免费高清视频| 国产一区二区丝袜| 欧美激情videoshd| 国产欧美日韩丝袜精品一区| www亚洲欧美| 日韩中文字幕不卡视频| 亚洲经典中文字幕| 久久人人看视频| 高跟丝袜欧美一区| 日本成人激情视频| 色综合91久久精品中文字幕| 在线电影中文日韩| 国产美女扒开尿口久久久| 中文字幕av日韩| 欧美成人免费在线视频| 久久精品国亚洲| 亚洲第一男人av| 成人一区二区电影| 久久影院资源站| 北条麻妃在线一区二区| 日韩精品视频免费| 日韩电影在线观看免费| 久久精品久久久久电影| 亚洲男人天堂2019| 91精品国产一区| 亚洲日韩欧美视频| 国产九九精品视频| 久久亚洲电影天堂| 国产精品自拍偷拍|