Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Oracle DelphiXE и StoredProcedure  [new]
comtehno
Member

Откуда: Архангельск
Сообщений: 131
Привожу сначала код, потом опишу проблему
PROCEDURE STAT_REESTR (ROVD NUMBER, YEAR NUMBER, MONTH NUMBER, DAY NUMBER) AS
    V_D3N_F10   NUMBER;
    V_F10_COUNT NUMBER;
    V_F11_COUNT NUMBER;
    V_F2_COUNT  NUMBER;
    V_F3_COUNT  NUMBER;
    V_F4_COUNT  NUMBER;
    V_F5_COUNT  NUMBER;
    V_F6_COUNT  NUMBER; 
    RDATA      DATE;
    CURSOR CUR IS SELECT D3N_F10 FROM F1_2012 WHERE D01_F10 = TO_NUMBER(ROVD);
BEGIN  
    --RDATA := TO_DATE(DATA,'DD.MM.YYYY');
    RDATA := TO_DATE(TO_CHAR(DAY)||'.'||TO_CHAR(MONTH)||'.'||TO_CHAR(YEAR),'DD.MM.YYYY');
    DELETE FROM REESTR_STAT_FORMS; 
    OPEN CUR;
    LOOP
    FETCH CUR INTO V_D3N_F10;
    EXIT WHEN CUR%NOTFOUND;
    SELECT COUNT(*) INTO V_F10_COUNT FROM F1_2012 WHERE D3N_F10 = V_D3N_F10 AND D06_F10 = TO_DATE(RDATA,'DD.MM.YYYY');
    SELECT COUNT(*) INTO V_F11_COUNT FROM F1_2012 WHERE D3N_F10 = V_D3N_F10 AND D05_F10 = TO_DATE(RDATA,'DD.MM.YYYY');
    SELECT COUNT(*) INTO V_F2_COUNT  FROM F2_2012 WHERE D3N_F2  = V_D3N_F10 AND D05_F2  = TO_DATE(RDATA,'DD.MM.YYYY');
    SELECT COUNT(*) INTO V_F3_COUNT  FROM F3_2012 WHERE D3N_F3  = V_D3N_F10 AND D04_F3  = TO_DATE(RDATA,'DD.MM.YYYY');
    SELECT COUNT(*) INTO V_F4_COUNT  FROM F3_2012 WHERE D3N_F3  = V_D3N_F10 AND D04_F4  = TO_DATE(RDATA,'DD.MM.YYYY');
    SELECT COUNT(*) INTO V_F5_COUNT  FROM F5_2012 WHERE D3N_F5  = V_D3N_F10 AND D05_F5  = TO_DATE(RDATA,'DD.MM.YYYY');
    SELECT COUNT(*) INTO V_F6_COUNT  FROM F6_2012 WHERE D2N_F6  = V_D3N_F10 AND DT_REG  = TO_DATE(RDATA,'DD.MM.YYYY');
    IF V_F10_COUNT > 0 OR V_F11_COUNT > 0 OR V_F2_COUNT > 0 OR V_F3_COUNT > 0 OR V_F4_COUNT > 0 OR V_F5_COUNT > 0 OR V_F6_COUNT > 0 THEN
        INSERT INTO REESTR_STAT_FORMS(T_D3N_F10, T_F10, T_F11, T_F2, T_F3, T_F4, T_F5, T_F6) 
        VALUES(V_D3N_F10, V_F10_COUNT, V_F11_COUNT, V_F2_COUNT, V_F3_COUNT, V_F4_COUNT, V_F5_COUNT, V_F6_COUNT);        
        COMMIT;
    END IF;    
    END LOOP;
    CLOSE CUR;
END STAT_REESTR;


Создаю в Оракле хранимую процедуру, в самом оракле отрабатывает на ура:
call case1.STAT_REESTR (30,2012,6,25);
/
SELECT * FROM REESTR_STAT_FORMS ORDER BY T_D3N_F10;

выдает записи, все отлично,
проблемы начинаются когда я пытаюсь активировать данную процедуру из делфи,
для примера приведу кусочек с использованием TADOStoredProcedure
  adoc                     := TADOConnection.Create(Application);
  adoc.Connected           := False;
  adoc.ConnectionString    := frmMain.sCS;
  adoc.LoginPrompt         := False;
  adoc.Connected           := True;
  adop                     := TADOStoredProc.Create(Application);
  adop.Connection          := adoc;
  adop.ProcedureName       := 'case1.STAT_REESTR';
  adop.ExecuteOptions      := [eoExecuteNoRecords];
  adop.Parameters.Refresh;
  adop.Parameters.Clear;
  adop.Parameters.CreateParameter('ROVD',ftInteger,pdInputOutput,8,prog.ROVD);
  adop.Parameters.CreateParameter('YEAR',ftInteger,pdInputOutput,8,prog.year);
  adop.Parameters.CreateParameter('MONTH',ftInteger,pdInputOutput,8,prog.month);
  adop.Parameters.CreateParameter('DAY',ftInteger,pdInputOutput,8,prog.day);
  adop.ExecProc;
  adop.Free;

Код отрабатывает, НО в таблице нет данных, почему???? Помогите, а то мозг уже плавитсяююю
4 июл 12, 19:30    [12818545]     Ответить | Цитировать Сообщить модератору
 Re: Oracle DelphiXE и StoredProcedure  [new]
inse
Member

Откуда:
Сообщений: 34
Включите трассировку и посмотрите вызывается ли процедура и какие у нее входящие параметры (или добавьте в код процедуры отладочную информацию).

PS Что мешает делать добавление одним insert' ом без курсора и commit' а в цикле?
4 июл 12, 20:20    [12818658]     Ответить | Цитировать Сообщить модератору
 Re: Oracle DelphiXE и StoredProcedure  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51780

comtehno
Код отрабатывает, НО в таблице нет данных, почему????

Транзакция коммитится где?

Posted via ActualForum NNTP Server 1.5

4 июл 12, 20:22    [12818661]     Ответить | Цитировать Сообщить модератору
 Re: Oracle DelphiXE и StoredProcedure  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54383
To_date от даты - к новым вопросам (народная примета)
4 июл 12, 20:34    [12818684]     Ответить | Цитировать Сообщить модератору
 Re: Oracle DelphiXE и StoredProcedure  [new]
inse
Member

Откуда:
Сообщений: 34
А еще TO_NUMBER от числа.
4 июл 12, 20:37    [12818697]     Ответить | Цитировать Сообщить модератору
 Re: Oracle DelphiXE и StoredProcedure  [new]
comtehno
Member

Откуда: Архангельск
Сообщений: 131
Dimitry Sibiryakov,
коммит стоит после инсерта, видно в коде процедуры,
факт тот, что в PL/SQL developer все выполняется, и проблем нет вообще, меня беспокоит, что из delphi не работает по ходу и не пойму почему.
4 июл 12, 21:15    [12818857]     Ответить | Цитировать Сообщить модератору
 Re: Oracle DelphiXE и StoredProcedure  [new]
comtehno
Member

Откуда: Архангельск
Сообщений: 131
Господа, в том то и дело что в девелопере выполняется код, то есть ошибки в PL/SQL нет, в чем может быть загвоздка вызова кода из приложения, вот это мне не понятно до си пор
4 июл 12, 21:18    [12818869]     Ответить | Цитировать Сообщить модератору
 Re: Oracle DelphiXE и StoredProcedure  [new]
AlexFF__|
Member

Откуда:
Сообщений: 2855
andreymx
To_date от даты - к новым вопросам (народная примета)

Вполне возможно, что к старому, вышеуказанному.
4 июл 12, 21:27    [12818903]     Ответить | Цитировать Сообщить модератору
 Re: Oracle DelphiXE и StoredProcedure  [new]
comtehno
Member

Откуда: Архангельск
Сообщений: 131
немного переделал код
s := 'EXECUTE case1.STAT_REESTR(' + IntToStr(StrToInt(prog.ROVD)) + ',' + IntToStr(prog.year) + ',' +
       IntToStr(prog.month) + ',' + IntToStr(prog.day) + ')';
  adoc                     := TADOConnection.Create(Application);
  adoc.Connected           := False;
  adoc.ConnectionString    := frmMain.sCS;
  adoc.LoginPrompt         := False;
  adoc.Connected           := True;
  adoc.Execute(s);

в MSSQLServer срабатывает, в Oracle пишет ORA-00900 Invalid SQL statement, все входные параметры number, поэтому косяки с кавычками не могут быть, даже не знаю куда еще посмотреть
4 июл 12, 21:36    [12818937]     Ответить | Цитировать Сообщить модератору
 Re: Oracle DelphiXE и StoredProcedure  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51780

comtehno
даже не знаю куда еще посмотреть

В SQL Reference. Процедуры не так вызываются.

Posted via ActualForum NNTP Server 1.5

4 июл 12, 22:01    [12819028]     Ответить | Цитировать Сообщить модератору
 Re: Oracle DelphiXE и StoredProcedure  [new]
comtehno
Member

Откуда: Архангельск
Сообщений: 131
Dimitry Sibiryakov,

я уж как только не пробовал, а можно ссылочку?
4 июл 12, 22:16    [12819096]     Ответить | Цитировать Сообщить модератору
 Re: Oracle DelphiXE и StoredProcedure  [new]
comtehno
Member

Откуда: Архангельск
Сообщений: 131
Dimitry Sibiryakov,

извиняюсь за надоедливость, а можно все таки ссылку на то как вызываются процедуры?
5 июл 12, 07:24    [12819828]     Ответить | Цитировать Сообщить модератору
 Re: Oracle DelphiXE и StoredProcedure  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18486
В SQL нет оператора EXECUTE.
Есть CALL или анонимный блок (BEGIN ... END;)
5 июл 12, 07:28    [12819830]     Ответить | Цитировать Сообщить модератору
 Re: Oracle DelphiXE и StoredProcedure  [new]
comtehno
Member

Откуда: Архангельск
Сообщений: 131
Вячеслав Любомудров,

про оператор call я в курсе,
проблема все таки не в оракле, а в delphi есть у кого нибудь пример как запустить процедуру из делфей,
я уже попроводал и через ado компоненты и через odac, приведу код ниже, может где ошибаюсь (для субд mssql server работает)
  adoc                     := TADOConnection.Create(Application);
  adoc.Connected           := False;
  adoc.ConnectionString    := frmMain.sCS;
  adoc.LoginPrompt         := False;
  adoc.Connected           := True;
  adocom                        := TADOCommand.Create(Application);
  adocom.Connection             := adoc;
  adocom.CommandType            := cmdStoredProc;
  adocom.CommandText            := 'CASE1.STAT_REESTR';
  adocom.Parameters.Add;
  adocom.Parameters[0].DataType := ftInteger;
  adocom.Parameters[0].Value    := StrToInt(prog.ROVD);
  adocom.Parameters.Add;
  adocom.Parameters[1].DataType := ftInteger;
  adocom.Parameters[1].Value    := prog.year;
  adocom.Parameters.Add;
  adocom.Parameters[2].DataType := ftInteger;
  adocom.Parameters[2].Value    := prog.month;
  adocom.Parameters.Add;
  adocom.Parameters[3].DataType := ftInteger;
  adocom.Parameters[3].Value    := prog.day;
  adocom.Prepared;
  adocom.Execute;
  adocom.Free;
5 июл 12, 13:26    [12821846]     Ответить | Цитировать Сообщить модератору
 Re: Oracle DelphiXE и StoredProcedure  [new]
123йй
Guest
comtehno,

под рукой дельфей нет но что то типа того для квери
Q.Parameters.CreateParameter(':vCode',ftString,pdInput,5,'Test');
Q.SQL.Text:='Begin scm.proc_test(:vCode); end;';
Q.ExecSQL;
5 июл 12, 14:39    [12822485]     Ответить | Цитировать Сообщить модератору
 Re: Oracle DelphiXE и StoredProcedure  [new]
comtehno
Member

Откуда: Архангельск
Сообщений: 131
123йй,

спасибо, делал и подобным способом тоже, но по факту процедура не отрабатывает, почему не могу понять, в девелопере все срабатывает нв ура. Может для процедур какие компоненты лучше работают?
6 июл 12, 07:32    [12826039]     Ответить | Цитировать Сообщить модератору
 Re: Oracle DelphiXE и StoredProcedure  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54383
Дело не в компоненте
Процедуру смотри
Отлаживай.
Убирай неясные преобразования.
Если не можешь отладить процедуру из адо - запиши все шаги в отдельную таблицу - лог.
6 июл 12, 07:55    [12826056]     Ответить | Цитировать Сообщить модератору
 Re: Oracle DelphiXE и StoredProcedure  [new]
spywares
Member

Откуда:
Сообщений: 267
Вот ты в adocom.CommandText и напиши
begin
CASE1.STAT_REESTR;
end;


Авось полегчает твоему АДО при выполнении блока. А вообще желательно для оракла юзать ODAC или на худой конец DOA.
Немало кирпичей было выс.....но при использовании ADO в связке с ораклом.
6 июл 12, 16:46    [12830139]     Ответить | Цитировать Сообщить модератору
 Re: Oracle DelphiXE и StoredProcedure  [new]
comtehno
Member

Откуда: Архангельск
Сообщений: 131
Пользовал и DOA, та же фигня... уже не знаю что и делать
19 ноя 12, 16:46    [13495816]     Ответить | Цитировать Сообщить модератору
 Re: Oracle DelphiXE и StoredProcedure  [new]
comtehno
Member

Откуда: Архангельск
Сообщений: 131
Кстати обнаружил заманчивую особенность, когда выполняю процедуру через SQL+:

SQL> SET SERVEROUTPUT ON
SQL> BEGIN
2 CASE1.STAT_REESTR(1,2012,11,16);
3 END;
4 /
ВЫБОРКА ЗАКОНЧЕНА

Выдает консоль, но в процедуре в оракл у меня есть еще вывод результатов:
PROCEDURE STAT_REESTR (ROVD NUMBER, YEAR NUMBER, MONTH NUMBER, DAY NUMBER) AS
    V_D3N_F10   NUMBER;
    V_F10_COUNT NUMBER;
    V_F11_COUNT NUMBER;
    V_F2_COUNT  NUMBER;
    V_F3_COUNT  NUMBER;
    V_F4_COUNT  NUMBER;
    V_F5_COUNT  NUMBER;
    V_F6_COUNT  NUMBER; 
    RDATA       DATE;
    CURSOR CUR IS SELECT D3N_F10 FROM F1_2012 WHERE D01_F10 = TO_NUMBER(ROVD);
BEGIN  
    RDATA := TO_DATE(TO_CHAR(DAY)||'.'||TO_CHAR(MONTH)||'.'||TO_CHAR(YEAR),'DD.MM.YYYY');
    DELETE FROM REESTR_STAT_FORMS;
    COMMIT; 
    OPEN CUR;
        LOOP
            FETCH CUR INTO V_D3N_F10;
            EXIT WHEN CUR%NOTFOUND;
            SELECT COUNT(*) INTO V_F10_COUNT FROM F1_2012 WHERE D3N_F10 = V_D3N_F10 AND F1_2012.dv_f10 = TO_DATE(RDATA,'DD.MM.YYYY');
            SELECT COUNT(*) INTO V_F11_COUNT FROM F1_2012 WHERE D3N_F10 = V_D3N_F10 AND F1_2012.dv_f11 = TO_DATE(RDATA,'DD.MM.YYYY');
            SELECT COUNT(*) INTO V_F2_COUNT  FROM F2_2012 WHERE D3N_F2  = V_D3N_F10 AND F2_2012.dv_f20 = TO_DATE(RDATA,'DD.MM.YYYY');
            SELECT COUNT(*) INTO V_F3_COUNT  FROM F3_2012 WHERE D3N_F3  = V_D3N_F10 AND F3_2012.dv_f3  = TO_DATE(RDATA,'DD.MM.YYYY');
            SELECT COUNT(*) INTO V_F4_COUNT  FROM F3_2012 WHERE D3N_F3  = V_D3N_F10 AND F3_2012.dv_f4  = TO_DATE(RDATA,'DD.MM.YYYY');
            SELECT COUNT(*) INTO V_F5_COUNT  FROM F5_2012 WHERE D3N_F5  = V_D3N_F10 AND F5_2012.dv_f5  = TO_DATE(RDATA,'DD.MM.YYYY');
            SELECT COUNT(*) INTO V_F6_COUNT  FROM F6_2012 WHERE D2N_F6  = V_D3N_F10 AND DT_REG         = TO_DATE(RDATA,'DD.MM.YYYY');
            IF V_F10_COUNT > 0 
            OR V_F11_COUNT > 0 
            OR V_F2_COUNT  > 0 
            OR V_F3_COUNT  > 0 
            OR V_F4_COUNT  > 0 
            OR V_F5_COUNT  > 0 
            OR V_F6_COUNT  > 0 THEN
                INSERT INTO REESTR_STAT_FORMS(T_D3N_F10, T_F10, T_F11, T_F2, T_F3, T_F4, T_F5, T_F6) 
                VALUES(V_D3N_F10, V_F10_COUNT, V_F11_COUNT, V_F2_COUNT, V_F3_COUNT, V_F4_COUNT, V_F5_COUNT, V_F6_COUNT);        
                COMMIT;
                DBMS_OUTPUT.put_line('ДОБАВЛЕНА ЗАПИСЬ');
            END IF;    
        END LOOP;
    CLOSE CUR;
    DBMS_OUTPUT.PUT_LINE('ВЫБОРКА ЗАКОНЧЕНА');
END STAT_REESTR;


Может быть здесь косяк, только пока не понял какой...
20 ноя 12, 09:12    [13498296]     Ответить | Цитировать Сообщить модератору
 Re: Oracle DelphiXE и StoredProcedure  [new]
xtender
Member

Откуда: Мск
Сообщений: 5704
comtehno,

Set serverout on
20 ноя 12, 10:27    [13498653]     Ответить | Цитировать Сообщить модератору
 Re: Oracle DelphiXE и StoredProcedure  [new]
xtender
Member

Откуда: Мск
Сообщений: 5704
xtender
comtehno,

Set serverout on
а ошибся, не заметил что вопрос не в этом.
20 ноя 12, 10:28    [13498658]     Ответить | Цитировать Сообщить модератору
 Re: Oracle DelphiXE и StoredProcedure  [new]
comtehno
Member

Откуда: Архангельск
Сообщений: 131
Наводит на размышление тот факт, что не работает в SQL+, TOAD, но работает в SQLNavigator
20 ноя 12, 10:43    [13498747]     Ответить | Цитировать Сообщить модератору
 Re: Oracle DelphiXE и StoredProcedure  [new]
tru55
Member

Откуда: СПб
Сообщений: 19790
comtehno
Наводит на размышление тот факт, что не работает в SQL+, TOAD, но работает в SQLNavigator

Да ни на что это не наводит. Разные ГУИ любят неявно делать всякие доп. установки
20 ноя 12, 10:53    [13498787]     Ответить | Цитировать Сообщить модератору
 Re: Oracle DelphiXE и StoredProcedure  [new]
comtehno
Member

Откуда: Архангельск
Сообщений: 131
вот в том то и дело, хотелось бы знать что дополнительно делает навигатор, что не удается скл+ и тоад
20 ноя 12, 10:55    [13498808]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Oracle Ответить