Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ORA-00933:SQL命令未正确结束_C#_Sql_Oracle_Ora 00933 - Fatal编程技术网

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来说,行内注释更好,因为当你不知道有多少代码被删除时,他必须尝试在没有断行的情况下解码查询评论-