Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2009.04.05;
Скачать: [xml.tar.bz2];

Вниз

Вопрос к знатокам ODAC   Найти похожие ветки 

 
keymaster ©   (2009-02-03 10:36) [0]

Приложение на Delphi 2006 работает с базой под Oracle 10g.
Вся работа ведётся через хранимки, объединённые в пакеты.
Хранимки написаны следующим образом:
function myprocedure(someparams) return nvarchar2 is
begin
 ......
 commit;
 return null;
 exception
   when others then
   rollback;
   return sqlerrm;
end;

т.е. при успешном выполнении результат пустой, при ошибке - в результате строка ошибки, которую "видит" приложение и показывает пользователю error message.

Запускается всё это через OraStoredProc. B И всё хорошо до тех пор, пока эта функция "главная" в компоненте. Она честно записывает результат в параметр "Result".
Но в силу ряда причин приложение переписано и теперь на orastoredproc висит всё: чтение списка данных, insert, update, lock, заполнены соответсвующие sql-запросы, т.е., к примеру, insertsql=":result := mypackage.myfunction(params)".
И тут всё рассыпается, т.к. она пытается писать result не в параметр который доступен через свойства компонента, а в какое-то своё поле, о чём и сообщает - что нужно такое поле.
Создавал calculated-поле result и подсовывал его, но оно во всех случаях остаётся пустым.
Как выкрутиться?


 
Медвежонок Пятачок ©   (2009-02-03 10:44) [1]

переписать приложение еще раз


 
Медвежонок Пятачок ©   (2009-02-03 10:46) [2]

и теперь на orastoredproc висит всё: чтение списка данных, insert, update, lock, заполнены соответсвующие sql-запросы, т.е., к примеру, insertsql=":result := mypackage.myfunction(params)".

а не должно теперь все висеть на orastoredproc.
должно "висеть" на orasql в котором оформляется анонимный блок.


 
keymaster ©   (2009-02-03 11:01) [3]

Без разницы.
OraQuery так же возвращает ошибку not found field correspondiong parameter result.


 
Медвежонок Пятачок ©   (2009-02-03 11:02) [4]

ну так ошибка в синтаксике.


 
keymaster ©   (2009-02-03 11:04) [5]


> ну так ошибка в синтаксике.

где именно?


 
Медвежонок Пятачок ©   (2009-02-03 11:06) [6]

мне угадать номер строки и колонки?


 
Медвежонок Пятачок ©   (2009-02-03 11:07) [7]

... не видя вообще что там у тебя сейчас понаписано


 
keymaster ©   (2009-02-03 11:09) [8]

create table TST
(
 TST_ID   NUMBER not null,
 TST_NAME NVARCHAR2(100) not null
);



> create sequence SQ_TST
> minvalue 0
> maxvalue 999
> start with 21
> increment by 1
> cache 20;


в пакете:

>   function listtst(P_TST OUT ref_cur) return nvarchar2 is
>   begin
>    open P_TST for
>      select * from tst;
>    return null;  
>   end;
>  
>   function instst(P_NAME tst.tst_name%TYPE) return nvarchar2
> is
>   begin
>     insert into tst(tst_id,tst_name)
>       values(sq_tst.nextval, P_NAME);
>     commit;
>     return null;
>     exception
>      when others then
>      rollback;
>      return sqlerrm;  
>   end;


В компоненте (OraQuery):
SQL =
begin
 :RESULT := TSTPACK.INSTST(:P_NAME);
end;


InsertSQL =
begin
 :RESULT := TSTPACK.INSTST(:P_NAME);
end;


 
Медвежонок Пятачок ©   (2009-02-03 11:24) [9]

и какой же это инсерт скл?
и как он по твоему должен догадаться к какому полю вязать параметр резалт?


 
keymaster ©   (2009-02-03 11:26) [10]

об этом я говорил в своём первом сообщении.
у компонента oraquery (или orastoredproc) есть параметр RESULT, но оно требует поле.


 
Медвежонок Пятачок ©   (2009-02-03 11:38) [11]

у тебя неправильный insert sql вот и все.
да еще и в точности совпадающий с select sql.

в общем полная бессмыслица


 
keymaster ©   (2009-02-03 11:41) [12]

Блин. закопипастил одно и то же два раза.
SQL=
begin
 :RESULT := hbase.TSTPACK.LISTTST(:P_TST);
end;


P_TST - это out-параметр типа cursor


 
keymaster ©   (2009-02-03 11:43) [13]

Указанный InsertSQL прекрасно работает, если он записан в orastoredproc в качестве SQL - в таком случае  функция выполняется и в параметр компонента записывается результат.


 
Медвежонок Пятачок ©   (2009-02-03 11:44) [14]

интересно, каким образом обращение к такому listtst в тексте insert sql поможет что-то вставить на сервере?

function listtst(P_TST OUT ref_cur) return nvarchar2 is
>   begin
>    open P_TST for
>      select * from tst;
>    return null;  
>   end;


 
keymaster ©   (2009-02-03 11:46) [15]


> интересно, каким образом обращение к такому listtst в тексте
> insert sql поможет что-то вставить на сервере?function listtst(P_TST
> OUT ref_cur) return nvarchar2 is>   begin>    open P_TST
> for>      select * from tst;>    return null;  >   end;

это НЕ INSERTSQL. Это SELECT SQL, о чём, в общем-то нетрудно догадаться.


 
Медвежонок Пятачок ©   (2009-02-03 11:47) [16]

а пару минут тому это было инсерт-скл"ем


 
keymaster ©   (2009-02-03 11:48) [17]


> а пару минут тому это было инсерт-скл"ем

не было ни разу.
стоит перечитать топик - это будет понятно.



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2009.04.05;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.008 c
2-1233835341
asddsa
2009-02-05 15:02
2009.04.05
Доступ к расшаренным ресурсам


3-1217515810
Dmitry S
2008-07-31 18:50
2009.04.05
Помогите с запросом с присоединением (MySQL)


15-1233170938
XeON
2009-01-28 22:28
2009.04.05
Какой язык использовать?


8-1192654893
Pavia
2007-10-18 01:01
2009.04.05
Проблемы с DSTrackBar


2-1234781737
b@v
2009-02-16 13:55
2009.04.05
Подскажите с запросом





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский