我正在尝试使用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作为管理员。
答案 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没有本机语句终止符,尽管工具通常需要终止符,分号通常是默认值。)