Oracle PL SQL работает от SQL Dev. но не из кода - PullRequest
0 голосов
/ 15 февраля 2012

Я медленно схожу с ума здесь ... почему этот мир кода SQL работает от SQL Developer а не из C #?

declare x integer;
begin
insert into aspa2_counters (shortname, description, devicegroupid) values ('TEST0', 'DESC0', 61) returning counterid into x;
INSERT ALL  
INTO aspa2_priceclass (from_num, to_num, price, fk_counterid) VALUES (0,100,0.22,x) 
INTO aspa2_priceclass (from_num, to_num, price, fk_counterid) VALUES (101,200,0.23,x) 
SELECT * FROM dual; 
end;

В коде динамически генерируются несколько вставок. Пожалуйста, помогите ... Я провел два дня на этом, и это замедляет проект. Пожалуйста, требуйте больше информации, если это необходимо.

Спасибо!

РЕДАКТИРОВАТЬ: я забыл записать ошибку:

ORA-06550: line 1, column 19:
PLS-00103: Encountered the symbol "" when expecting one of the following:

   begin function package pragma procedure subtype type use
   <an identifier> <a double-quoted delimited-identifier> form
   current cursor

Ответы [ 2 ]

2 голосов
/ 17 февраля 2012

Хорошо, я наконец-то решил проблему.

Похоже, Oracle odp.net очень чувствителен к символам перевода строки ("\ r \ n" & "\ n"), поэтому убедитесь, что вы не используете @для многострочных строк или попробуйте использовать метод .replace () для замены "\ r \ n" на "\ n".

Вот как это выглядит в конце:

string anonymousBlock = "declare x integer;" +
                        "begin " +
                        "insert into aspa2_counters (shortname, description, devicegroupid) values (:p1, :p2, :p3) returning counterid into x;" +
                          buildInsert.ToString() + 
                        " end;";
0 голосов
/ 17 февраля 2012

Вот жестко закодированная часть:

string query = @"declare x integer;
                      begin
                      insert into aspa2_counters (shortname, description, devicegroupid) values ('TEST', 'OPIS', 61) returning counterid into x;
                      INSERT ALL  
                          INTO aspa2_priceclass (from_num, to_num, price, fk_counterid) VALUES (0,100,0.22,x) 
                          INTO aspa2_priceclass (from_num, to_num, price, fk_counterid) VALUES (101,200,0.23,x) 
                      SELECT * FROM dual; 
                      end;";

и код кода команды Oracle:

            using (OracleCommand cmnd = new OracleCommand(cmndText, con))
            {
                if (parameters != null)
                {
                    foreach (OracleParameter p in parameters)
                    {
                        cmnd.Parameters.Add(p);
                    }
                }

                try
                {
                    cmnd.ExecuteNonQuery();
                }
                catch (Exception ex)
                {

                }
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...