C# ORA-00933:SQL命令未正确结束
我尝试运行以下命令:C# ORA-00933:SQL命令未正确结束,c#,sql,oracle,ora-00933,C#,Sql,Oracle,Ora 00933,我尝试运行以下命令: select * from tax.tax_payer@reis tp left outer join re_right@reis r on (tp.tin = r.tin or tp.tin = r.tin_a1 or tp.tin = r.tin_a2) where (r.right_status = -1 or r.right_status is null) --and r.right_id is not null and tp.je_id = 12; 但是继续 O
select *
from tax.tax_payer@reis tp
left outer join re_right@reis r on (tp.tin = r.tin or tp.tin = r.tin_a1 or tp.tin = r.tin_a2)
where (r.right_status = -1 or r.right_status is null)
--and r.right_id is not null
and tp.je_id = 12;
但是继续
ORA-00933:SQL命令未正确结束
如果我删除注释,它可以正常工作,但为什么?上述代码在SQL*Plus中工作得非常好,在远程数据库连接中有合适的定义。在您的实际执行环境中,一定有一些令人困惑的软件 尝试使用行内注释表单,而不是直到行末注释。从风格上来说,没有必要使用;除非您的执行环境需要SQL语句,或者您提交的是一个多行过程代码块,否则将在SQL语句末尾显示
select *
from tax.tax_payer@reis tp
left outer join
re_right@reis r
on ( tp.tin = r.tin
or tp.tin = r.tin_a1
or tp.tin = r.tin_a2
)
where ( r.right_status = -1
or r.right_status is null
)
and tp.je_id = 12
/* and r.right_id is not null */
此外,您可能希望将所有计算移到远程数据库中,而不是将数据跨线拉到本地数据库上进行连接。一些较新版本的Oracle将为您进行此优化。上述代码在SQL*Plus中运行良好,在远程数据库连接中具有合适的定义。在您的实际执行环境中,一定有一些令人困惑的软件 尝试使用行内注释表单,而不是直到行末注释。从风格上来说,没有必要使用;除非您的执行环境需要SQL语句,或者您提交的是一个多行过程代码块,否则将在SQL语句末尾显示
select *
from tax.tax_payer@reis tp
left outer join
re_right@reis r
on ( tp.tin = r.tin
or tp.tin = r.tin_a1
or tp.tin = r.tin_a2
)
where ( r.right_status = -1
or r.right_status is null
)
and tp.je_id = 12
/* and r.right_id is not null */
此外,您可能希望将所有计算移到远程数据库中,而不是将数据跨线拉到本地数据库上进行连接。一些较新版本的Oracle将为您进行此优化。在.NET中,您的查询上不能有尾随分号-它会使查询出错。在.NET中,您的查询上不能有尾随分号-它会使查询出错。为什么会将此标记为C?这个查询是以什么形式执行的?如果将其转换为SQL字符串,然后通过.NET对象执行,则可能是对注释的处理不正确。@user673647:如何运行此查询?通过SQL*Plus,SQLDeveloper,在代码中?回答你们两个:c标记表示他用c运行代码。为什么这个标记是c?这个查询是以什么形式执行的?如果将其转换为SQL字符串,然后通过.NET对象执行,则可能是对注释的处理不正确。@user673647:如何运行此查询?通过SQL*Plus,SQLDeveloper,在代码中?回答你们两个:c标记表示他用c运行代码。实际上,跳过这一点-如果你在取消注释行时说它有效,那么这不是它。但在过去,我确实遇到过这样的情况,即查询不能使用分号。实际上,请跳过这一点——如果您在取消注释该行时说它有效,那么这就不是了。但在过去我确实遇到过这样的情况,查询不能使用分号。你也可以使用nvlr.right\u status,-1=-1来代替where子句中的初始条件。你也可以在r.tin中使用tp.tin,r.tin\u a1,r.tin\u a2来连接。。。关于条款。当Oracle plan optimizer看到W=X或W=Y或W=Z模式时,它会为您这样做,但如果不比较表达式,人眼很难解释它。这也有助于避免剪切、粘贴和打字错误。我更喜欢行内注释,因为它可以避免在-被忽略后,断行被删除的风险。+1 Gary:对于可怜的DBA来说,行内注释更好,因为当你不知道有多少代码被删除时,他必须尝试在没有断行的情况下解码查询注释为-您还可以使用nvlr.right_status,-1=-1代替where子句中的初始条件。您还可以在r.tin、r.tin_a1、r.tin_a2中使用tp.tin进行连接。。。关于条款。当Oracle plan optimizer看到W=X或W=Y或W=Z模式时,它会为您这样做,但如果不比较表达式,人眼很难解释它。这也有助于避免剪切、粘贴和打字错误。我更喜欢行内注释,因为它可以避免在-被忽略后,断行被删除的风险。+1 Gary:对于可怜的DBA来说,行内注释更好,因为当你不知道有多少代码被删除时,他必须尝试在没有断行的情况下解码查询评论-