是否可以从Oracle DB中的存储过程调用vb.net函数?

时间:2014-10-09 20:14:40

标签: .net vb.net oracle plsql

我有一个通用的字符串操作函数,如下所示开发;

Public Class MyClass
  Public Function MyFunction(ByVal inString As String) As String
    Dim MyString as String = inString & " Some Stuff"
    Return MyString
  End Function
End Class

真正的功能是真实的东西,但它是所有字符串操作,没有数据库,文件或屏幕访问。

是否有一种简单的方法可以从Oracle DB中的包内的过程调用此函数?

我在DB服务器上安装了Oracle DB Extensions for .NET。

我希望避免在我开发VB.NET代码的计算机上安装任何东西。我之前使用c库(c ++ DLL)创建了外部包,但我的印象是.NET不同。我在搜索时发现的所有东西似乎都在谈论VS的某种形式的扩展,这种扩展允许“轻松”#34;直接从.NET部署。

我最终需要在多个数据库上部署它,并且需要一个我可以运行的手动进程,而不是从我的.NET开发计算机连接到每个数据库。

编辑:

我有一个从PL / SQL调用的现有C ++库。当我定义包体时,它看起来像;

create or replace PACKAGE BODY            "MY_PACKAGE" 
AS
   FUNCTION MY_FUNCTION (VAR1  in varchar2, VAR2 in varchar2, VAR3 in varchar2)RETURN PLS_INTEGER
   IS
      EXTERNAL 
      LIBRARY DLL_MY_LIBRARY 
      NAME "MY_FUNCTION"  
      LANGUAGE C 
      PARAMETERS (VAR1 string, VAR2 string, VAR3 string);  
END MY_PACKAGE;

类中VB.NET函数的定义是什么样的?我需要点符号吗?

create or replace PACKAGE BODY            "MY_PACKAGE" 
AS
   FUNCTION MY_CLASS.MY_FUNCTION (VAR1  in varchar2, VAR2 in varchar2, VAR3 in varchar2)RETURN PLS_INTEGER
   IS
      EXTERNAL 
      LIBRARY DLL_MY_LIBRARY 
      NAME "MY_CLASS.MY_FUNCTION"  
      LANGUAGE VB.NET 
      PARAMETERS (VAR1 string, VAR2 string, VAR3 string);  
END MY_PACKAGE;

该语言应该是什么?

1 个答案:

答案 0 :(得分:0)

我从未尝试过,但乍一看,我会尝试以下内容:

来自Oracle Extension for .NET开发人员指南11g第2版

<强> Development and Deployment with Visual Studio

<强> Step 5: Deploy the Procedure or Function

  

在数据库中部署过程或函数。该向导执行以下步骤:

     
      
  1. 以SYSDBA身份连接。
  2.   
  3. 将用户程序集复制到ORACLE_BASE \ ORACLE_HOME \ bin \ CLR目录或其子目录。
  4.   
  5. 创建Oracle库对象,并将此库对象的执行权限授予数据库用户:
  6.   
CREATE OR REPLACE LIBRARY CLRLIBRARY1_DLL AS '$ORACLE_HOME\bin\clr\CLRLibrary1_dll;
GRANT EXECUTE ON CLRLIBRARY1_DLL TO SCOTT;
  
      
  1. 根据用户定义的参数类型映射,为每个过程或函数在用户的数据库模式中创建一个PL / SQL包装器。
  2.   

确切地知道向导的作用,根据我的需要编写Power Shell脚本等来为您执行任务。

我会继续挖掘。这是我感兴趣的一个有趣的功能。


当我创建pl / sql包装器时,我会使用dot notataion吗?

Step 6 : Test the function应该回答您的问题。

Invoking from SQL*Plus

  

从SQL Plus调用GetDeptNo()函数.NET函数:

     

启动SQL Plus并以用户scott身份使用密码tiger登录。*

     

输入以下命令:

SET SERVEROUTPUT ON;
DECLARE
deptno BINARY_INTEGER;
BEGIN
  deptno := GetDeptNo(7934);
  DBMS_OUTPUT.PUT_LINE(deptno);
END;
  

或者,您可以执行以下语句:

SELECT GetDeptNo(7934) FROM DUAL;

因此,在我看来,您不需要使用点符号。