当前位置: 首页 > 知识库问答 >
问题:

Oracle.DataAccess.Client.OracleException:ORA-00900:无效的SQL语句

翟鹏
2023-03-14

我已使用以下代码创建了一个Oracle SP。如果我从SQLDeveloper执行它,那么它运行时不会出现任何错误/问题。但是,当我尝试从.NET代码调用同一SP时,将引发一个异常,并显示消息“Oracle.DataAccess.Client.OracleException:ORA-00900:invalid SQL statement”。

Oracle SP代码:

PROCEDURE sp_UpdateLSR(
    po_Info        OUT VARCHAR2,
    pi_gId         IN VARCHAR2,
    pi_cid         IN VARCHAR2
 ) IS pragma autonomous_transaction;
BEGIN

    UPDATE TableName
    SET colName = 6603
    WHERE colName21 = pi_gId AND COL2 = pi_cid;
    COMMIT;
    
    OPEN po_Info FOR SELECT pi_cid as MSG FROM dual;

EXCEPTION
WHEN OTHERS THEN
  ROLLBACK;
   common.sp_InsertErrorLog('sp_Name', SQLCODE, SQLERRM); -- nothing gets logged
 END;

我的VB.NET代码:

Public Function SetValues(ByVal gid As String, ByVal CId As String) As Boolean

     Dim connection As OracleConnection = New OracleConnection(GetConnectionString())
     Dim command As OracleCommand = connection.CreateCommand()
     Dim parameters As OracleParameter = New OracleParameter

     Dim dataAdapter As New OracleDataAdapter(command)
     Dim rtnMsg As String
     Dim ds As New DataSet

            Try
                connection.Open()
                command.Parameters.Add("parameters", OracleDbType.RefCursor, DBNull.Value, ParameterDirection.Output)
                command.Parameters.Add("pi_gId", OracleDbType.Varchar2, gid, ParameterDirection.Input)
                command.Parameters.Add("pi_cid", OracleDbType.Varchar2, CId, ParameterDirection.Input)
                

                command.CommandText = "sp_UpdateLSR"

                dataAdapter.Fill(ds)
                If ds.Tables(0).Rows.Count > 0 Then
                    rtnMsg = ds.Tables(0).Rows(0)(0).ToString()
                End If
                SetLIMSValues = rtnMsg.ToLower() = CharId.ToLower()
            Catch ex As Exception
                Throw New Exception("error", ex)
            Finally
                command.Dispose()
                parameters.Dispose()
                If Data.ConnectionState.Open Then
                    connection.Close()    'close the connection
                End If
            End Try

        End Function

有什么想法吗?

非常感谢。

共有1个答案

谭建章
2023-03-14

当您对数据库执行存储过程时,您需要告诉命令对象,默认值是命令文本

添加行:

command.CommandType = CommandType.StoredProcedure

在你设置命令文本之前或之后——只是一个方便记忆和靠近的地方。

 类似资料:
  • 在Oracle的SQL developer中,我创建了一个名为BBS_COUNT_base的表,其定义如下: 我还使用以下语句在表中插入了一条记录: 现在,使用SQLDeveloper,我可以使用 将基本edn值更新为(在本测试案例中)相同的值。 但是,当我试图将此语句传递给clojure.java.jdbc/query时,JDBC驱动程序错误输出,标题中显示了错误。有人知道为什么JDBC驱动程序

  • 问题内容: 我正在使用Oracle 11g,正在通过Java代码执行Oraclesql脚本。我的SQL脚本可能包含SQL语句(DDL或DML)或PL /SQL块,因此我不想解析Java代码中的脚本,但使用此解决方案立即执行了完整的脚本。以下是示例代码,其中包含SQLExec类。 此解决方案在大多数情况下都有效,除了如果sql脚本包含它会失败,并显示 java.sql.SQLSyntaxErrorE

  • 我正在使用Oracle 11g,我正在通过java代码执行Oracle sql脚本。我的SQL脚本可能包含SQL语句(DDL或DML)或PL/SQL块,所以我不想在我的java代码中解析脚本,而是使用此解决方案一次执行完整的脚本。下面是示例代码,其中SQLExec类位于ant jar中。 此解决方案适用于大多数情况,但如果sql脚本包含,则会因java.sql.SQLSyntaxErrorExce

  • 我正在使用Oracle ODBC驱动程序,希望动态传递变量。我的查询是这样的: 虽然这个查询在OracleSQLDeveloper中运行良好,但我认为我没有为ODBC驱动程序正确执行编写查询。有什么建议吗? 从ODBC日志: 退出SQLExecDirectW,返回代码为-1(SQL_错误)“define val='Test';\a从Name='Test'所在的表中选择*

  • 从jdbcTemplate执行以下查询时遇到异常 以下是例外 org.springframework.jdbc.UncategorizedSQLException:PreparedStatementCallback;SQL的未分类SQLException[update TEMP_BRD_STATS SET STATS=null,其中BRDC_STAT_ID=?];SQL状态[null];错误代码[

  • 我正在尝试创建一个与DAO.sql链接的DAO接口。stg字符串模板文件。查询非常简单,只需按id选择。 MyDao.groovy: MyDao.sql.stg: 我的后端数据库是甲骨文。我在甲骨文SQLDeveloper中尝试过这个查询,它工作得很好,但是当我使用应用程序和sql.stg文件运行查询时,它会给我: 我怀疑它不知怎么找不到sql。stg文件,即使我在POM中包含了资源目录。 如何让