在VB.NET中使用Oracle创建函数

10 浏览
0 Comments

在VB.NET中使用Oracle创建函数

我想在许多数据库中使用循环在Oracle中使用VB.NET创建一个函数。我正在使用以下查询:

CREATE OR REPLACE FUNCTION promo_code_fun(store_id IN VARCHAR2,ws_id IN VARCHAR2,trn_id IN VARCHAR2,business_dt IN VARCHAR2,line_no IN integer,item_cd IN VARCHAR2,creation_time timestamp)

问题是它创建了一个带有错误的函数。在Oracle中,它会自动在函数名之前添加模式名称。我已经通过VB代码传递了模式名称,但它创建的函数有错误。

CREATE OR REPLACE FUNCTION " & """" & SchemaName & """" & ".promo_code_fun(store_id IN VARCHAR2,ws_id IN VARCHAR2,trn_id IN VARCHAR2,business_dt IN VARCHAR2,line_no IN integer,item_cd IN VARCHAR2,creation_time timestamp)

如果我将这段代码复制到TOAD编辑器中并手动运行,它将创建一个没有错误的函数。

CREATE OR REPLACE FUNCTION "23914".promo_code_fun(store_id IN VARCHAR2,ws_id IN VARCHAR2,trn_id IN VARCHAR2,business_dt IN VARCHAR2,line_no IN integer,item_cd IN VARCHAR2,creation_time timestamp)

手动运行时,如果没有双引号,它会报错。

0
0 Comments

问题的原因是Oracle中的非引用标识符必须以数据库字符集中的字母字符开头,而引用标识符可以以任何字符开头。因此,如果要使用一个模式名称为23914,必须将其用双引号括起来。

解决方法是在使用23914作为模式名称时,将其用双引号括起来。以下是用VB.NET在Oracle中创建函数的示例代码:

Dim conn As New OracleConnection("your_connection_string")
conn.Open()
Dim command As New OracleCommand()
command.Connection = conn
command.CommandText = "CREATE FUNCTION ""23914"".my_function RETURN NUMBER AS BEGIN RETURN 1; END;"
command.ExecuteNonQuery()
conn.Close()

在上面的示例中,使用双引号将模式名称23914括起来,以便Oracle能够正确识别它作为一个引用标识符。然后,可以使用CREATE FUNCTION语句创建名为my_function的函数。

0