WinExec('f:\oracle\ora92\bin\exp.EXE test/test file=c:\test.dmp', SW_SHOWNORMAL);DELPHI里有一个函数ShellExecute,在USERS加上SHELLAPI
这个函数是直接运行你脚本
这是C++BU的用法,跟DELPHI是一样的。你修改一下。  ShellExecute(0, "open", "EXP system/manager FILE=EXP.DMP FULL=Y", NULL, NULL, SW_SHOWDEFAULT);
ShellExecute(0, "open", "imp system/manager FILE=EXP.DMP fromuser=user_name to user=user_name1", NULL, NULL, SW_SHOWDEFAULT);

解决方案 »

  1.   

    1. ShellExecute 是windows api函数啊,不是delphi专有的. 2. SQL Server 这一点比oracle 做的好,它有专门的支持com调用
        的系统存储过程 sp_OAcreate,sp_OAdestroy等等,oracle我不知道 3. 楼主觉得真的有必要在存储过程中调用dll文件吗? 我觉得安全性
        是必须值得考虑的。
      

  2.   

    请参考Oracle 8i Application Developer’s Guide - Foundmental
    dll写出来之后在oracle里面调用是很简单的,先创建library,让oracle知道从哪个dll文件去调用,然后发布dll中的函数,用create or replace function(procedure)就可以了。
    如果delphi写的dll不行的话,再用c写一个调delphi的就得了。我觉得只要是dll应该都可以的。
      

  3.   

    转载来自:zheng017
    oracle调用dll
    新建一个空的win32 dynamic_link library project.取名为testdll.加入testdll.cpp.源程序如下:#include <windows.h>int __stdcall DllMain(HANDLE,DWORD,LPVOID){ return 1;}short test(void){   return system("dir e: > e:\\mydire.txt"); }加入testdll.def:如下:LIBRARY "testdll.dll"EXPORTStest @1then click the bulid.get the testdll.dll.copy to e:\打开sql plus.登录(最好不要用internal身份登录).建立一个包:SQL> create or replace library wz_test  2  as 'e:\testdll.dll';  3  /建一个function:SQL> create or replace function wz_funtest  2  return binary_integer  3  as  4  external  5  library wz_test  6  name "test"  7  language c  8  parameters (return short);  9  /建一个表SQL>create table ff(addr varchar2(20));建立一个trigger:SQL> create or replace trigger my_test_trigger after insert on ff  2  declare  3  my_result binary_integer;  4  begin  5  my_result :=wz_funtest;  6  end;  7  /现在SQL>insert into ff values('chengdu');然后在e盘看看是不是多了一个文件.可以把我的dll中test函数改一下:用FindWindowEx,SendMessage跟自己程序通信或者直接用socket通信.嘻嘻,如果有转载的话,请署上zheng017的大名哈..<转载完>但这是调用c/c++,如果能直接调用delphi的就好了...希望有成功的能通知一下大家