как использовать oracle dbms_utility в С#

Я хочу использовать функцию СУБД ORACLE в своем приложении C # для компиляции всех недопустимых объектов, но я получил ошибку ниже. не могли бы вы помочь мне, как я могу запустить скрипт ниже на С#:

"exec dbms_utility.compile_schema('"+schema+"');";

моя функция:

internal void compileAllInvalideObject(string userId, string password, string schema)
        {
            //OracleConnection con = new OracleConnection();
            string connectionString = "provider=MSDAORA;data source="+userId+";user id="+userId+";password="+password;

            OleDbConnection myOleDbConnection = new OleDbConnection(connectionString);

            OleDbCommand myOleDbCommand = myOleDbConnection.CreateCommand();

            myOleDbCommand.CommandText = "exec dbms_utility.compile_schema('"+schema+"');";

            myOleDbConnection.Open();

            myOleDbCommand.ExecuteNonQuery();

            myOleDbConnection.Close(); 

        }

ошибка:

ORA-00900: неверный оператор SQL

Я использую оракул 9i.


person Amir    schedule 03.04.2012    source источник


Ответы (1)


На самом деле dbms_utility.compile_schema действует так же, как процедура хранения, поэтому мы не можем вызывать ее так же, как мы запускаем запрос, нам нужно написать программу таким образом, чтобы мы вызывали процедуру хранения.

 OracleConnection con = new OracleConnection();

            //using connection string attributes to connect to Oracle Database
            con.ConnectionString = "User Id="+userId+";Password="+password+";Data Source="+schema;


            OracleCommand ocb = new OracleCommand("dbms_utility.compile_schema", con);
            ocb.CommandType = CommandType.StoredProcedure;
            ocb.Parameters.Add(new OracleParameter("@schema", userId));
            con.Open();
            ocb.ExecuteNonQuery(); 
            Console.WriteLine("Connected to Oracle" + con.ServerVersion);
            // Close and Dispose OracleConnection object
            con.Close();
            con.Dispose();
            Console.WriteLine("Disconnected");
person Amir    schedule 04.04.2012
comment
Спасибо за ваш ответ, я пытался, но я не знаю, почему до сих пор количество недопустимых объектов не уменьшилось?!!! Любая идея? - person Amir; 12.06.2013
comment
Шутки в сторону? Прошло пятнадцать месяцев, а вы только начинаете это понимать? - person APC; 12.06.2013
comment
@APC, нет, не так, я использовал его, но, как вы можете заметить, я не выбрал его в качестве принятого ответа, потому что мои объекты все еще недействительны. все работает успешно, но все объекты недействительны. Вторая причина, по которой я снова изучаю это, заключается в том, что вчера я просто смог использовать ODP вместо компонента Microsoft. ;) поэтому я снова пытаюсь сделать то же самое, и когда я снова гуглю свою проблему, я добираюсь до своего вопроса без ответа :( - person Amir; 13.06.2013
comment
Когда вы говорите, что все работает успешно, что вы имеете в виду? Как вы проверяете, являются ли объекты недействительными? Пробовали ли вы перекомпилировать отдельный объект, чтобы посмотреть, компилируется ли он? Какой тип объектов - представления? сохраненные процессы? Типы SQL? - person APC; 13.06.2013
comment
@apc: это означает, что я не получаю никаких исключений, но это не влияет на недопустимые объекты. ответ на ваш второй вопрос - да, если я вручную перекомпилирую их с бентосом, они будут скомпилированы. - person Amir; 14.06.2013