我有一个通用的字符串操作函数,如下所示开发;
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;
该语言应该是什么?
答案 0 :(得分:0)
我从未尝试过,但乍一看,我会尝试以下内容:
来自Oracle Extension for .NET开发人员指南11g第2版
<强> Development and Deployment with Visual Studio 强>
<强> Step 5: Deploy the Procedure or Function 强>
在数据库中部署过程或函数。该向导执行以下步骤:
- 以SYSDBA身份连接。
- 将用户程序集复制到ORACLE_BASE \ ORACLE_HOME \ bin \ CLR目录或其子目录。
- 创建Oracle库对象,并将此库对象的执行权限授予数据库用户:
醇>
CREATE OR REPLACE LIBRARY CLRLIBRARY1_DLL AS '$ORACLE_HOME\bin\clr\CLRLibrary1_dll;
GRANT EXECUTE ON CLRLIBRARY1_DLL TO SCOTT;
- 根据用户定义的参数类型映射,为每个过程或函数在用户的数据库模式中创建一个PL / SQL包装器。
醇>
确切地知道向导的作用,根据我的需要编写Power Shell脚本等来为您执行任务。
我会继续挖掘。这是我感兴趣的一个有趣的功能。
当我创建pl / sql包装器时,我会使用dot notataion吗?
Step 6 : Test the function应该回答您的问题。
从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;
因此,在我看来,您不需要使用点符号。