指点成金-最美分享吧

登录

oracle 问题 ORA-00933: SQL 命令未正确结束 如何解决?

佚名 举报

篇首语:本文由小编为大家整理,主要介绍了oracle 问题 ORA-00933: SQL 命令未正确结束 如何解决?相关的知识,希望对你有一定的参考价值。

语句:Insert into videosource(select * from videosourcespare where VideoSourceID not in(select VideoSourceID from videosource))
补充:我在Oracle里面运行没有错误,但是在程序里面运行就报:ORA-00933: SQL 命令未正确结束 错误,怎么回事啊?

1、测试前添加一个快照点call dbms_workload_repository.create_snapshot();。

2、然后开始测试.或者程序运行完。测试完后,再加一个快照点。

3、打开toad for oracle软件连接oracle数据库。如果连接不上,需要配置系统环境变量,把Oracle的客户端目录配置下。

4、环境变量配置好的之后,打开小娃【连接】-->【连接参数】自动识别Oracle的.ora文件。

5、然后【数据库】-【监视】-【AWR报告】。

6、然后选择前后的快照点。然后run。最好的选择html文件。

参考技术A

一、对于这个错误:

    首先仔细检查sql语句是否存在语法错误。

(如果确认没有错误,可以拿到sql development中去用sql工具试试)。

2.检查使用连接数据库的方法。

executeQuery、execute、executeUpdate是否存在使用错误,或者换个试试。

3.我把sql语句中的";"去掉了,然后sql语句运行正常,没有报错,原因未知。

二、解决方案:

1)方案一:清空回收站(recyclebin)命令 : PURGE recyclebin;

2)方案二:收回表的命令:命令 :flashback table 原表名 to before drop;

3)方案三:直接删除表,不经过回收站:

(1)方法一: drop table 表名 purge;

(2) 方法二 :停用数据库的回收战功能; 10.1版本中,修改隐藏参数 _recyclebinalter system set "_recyclebin" = false;10.2版本中,alter system set recyclebin = off。

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

【中文标题】Oracle.DataAccess.Client.OracleException: ORA-00900: 无效的 SQL 语句【英文标题】:Oracle.DataAccess.Client.OracleException: ORA-00900: invalid SQL statement 【发布时间】:2021-01-11 19:24:35 【问题描述】:

我使用以下代码创建了一个 Oracle SP。如果我从 SQL 开发人员那里执行它,那么它运行时不会出现任何错误/问题。但是,当我尝试从 .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;EXCEPTIONWHEN 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

有什么想法吗?

谢谢。

【问题讨论】:

为什么要为单个静态值返回 RefCursor?为什么返回输入值pi_cid?异常处理程序也是无用的。如果 UPDATE 失败,那么无论如何它都会回滚。如果错误出现在其他地方,那么回滚是没有用的,因为你已经发出了 COMMIT。 对于单个返回值,我更喜欢使用FUNCTION 而不是过程。 【参考方案1】:

当你对数据库执行存储过程时,你需要告诉命令对象,默认是CommandText

添加行:

command.CommandType = CommandType.StoredProcedure

在您设置 CommandText 之前或之后 - 只是一个方便记忆和靠近的地方。

【讨论】:

谢谢JayV。 [不知道我是怎么错过的,我真的不知道该说什么:)]

以上是关于oracle 问题 ORA-00933: SQL 命令未正确结束 如何解决?的主要内容,如果未能解决你的问题,请参考以下文章