与另一个命令

时间:2017-03-30 14:34:57

标签: c# sql oracle plsql

我正在尝试使用that page中的解决方案打印查询结果。假脱机解决方案在我的项目中不起作用,但另一个在sqldeveloper中工作。该页面中定义的“run_query”过程。问题是它在c#代码中不起作用。代码是这样的:

cmd.CommandText = string.Format(@"CREATE OR REPLACE DIRECTORY TEST_DIR AS '{0}';
             exec run_query('SELECT {1} FROM  {2} {3} ORDER BY {4}','TEST_DIR','{5}');"
             ,strDirForFiles.Substring(0, strDirForFiles.Length - 2), 
             strColToSelect, strTableName, strWhere, strColToSelect, strTMPFileName);
cmd.ExecuteNonQuery();

在运行时,查询就是这样:

CREATE DIRECTORY TEST_DIR AS 'C:\\';
exec run_query('SELECT AccountNumber 
                FROM  LowCreditList WHERE VersionNumber=1 AND ChangeStatus = 0 
                ORDER BY AccountNumber','TEST_DIR','ASD.TMP'); 

但是该代码抛出了这样的异常:

  

消息=“错误[HY000] [Oracle] [ODBC] [Ora] ORA-00901:无效CREATE   命令\ n“个

当我执行

CREATE DIRECTORY TEST_DIR AS 'C:\\';

命令,没有例外。

我无法理解。它适用于sqldeveloper但不适用于C#。

注意:我使用Visual Studio作为管理员。

1 个答案:

答案 0 :(得分:1)

我不知道C#但是我假设你只能发送单独的SQL语句或PL / SQL块,而不是用分号分隔的列表。在任何情况下,exec都不是(它是某些IDE支持的SQL * Plus快捷方式。)

您可能需要发送单独的命令,如:

create directory test_dir as 'C:\\'

begin run_query('SELECT {1} FROM  {2} {3} ORDER BY {4}','TEST_DIR','{5}'); end;

(注意PL / SQL使用分号但SQL没有本机语句终止符,尽管工具通常需要终止符,分号通常是默认值。)