| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Oracle > как запустить хранимую процедуру |
| Автор: DEER 23.3.2006, 15:51 | ||||||||||||
| Oracle 8 среда TOAD Пусть есть пакет с подпрограммами PC_STAT хочу добавить в него ещё одну функцию, которая должна возвращать набор данных(таблица, в которой поля буду в функции подсчитывать) в SPEC пишу
в BODY пишу
компилирую сначала SPEC потом BODY все проходит без ошибок... как мне теперь запустить её и посмотреть результат? Если пишу в SQL Editor'е запрос
qqq - схема Oracl выдаёт ошибку:
Если пишу такой запрос
то
запускать пытаюсь и как Excecute Statement и как Excecute Script одна фигня.. Не подскажите в чем проблема? |
| Автор: DEER 23.3.2006, 16:31 | ||||
попробовал ещё одним способом
говорит
|
| Автор: batigoal 23.3.2006, 17:13 | ||
А если без имени схемы попробовать?
|
| Автор: DEER 23.3.2006, 17:26 |
| тоже самое, причем пишу PS_STAT. жду секунду повляестся список, в нём ЕСТЬ эта функция...... а может дело в том что это функция а не процедура? |
| Автор: LSD 23.3.2006, 21:57 | ||||
В PL/SQL нельзя игнорировать возвращаемое значение. Кошерный способ такой:
И еще у тебя ошибка в функции, надо так:
|
| Автор: DEER 24.3.2006, 09:30 | ||||||||
| Спасибо, заработало!!! Только теперь блок
просто выполняется и всё, т.е. результат не выводится никуда.. а задумка была такая: мне надо вывести в одном запросе даныые, они берутся из одной таблицы, но два раза т.е. примерно так
этот запрос подвисает часа на три. если же выпонить два запроса
и
то каждый по отдельности выполняется за 5 минут т.е. оба за 10 минут. Логично было бы написать ф-ю, которая всё это дело считала бы за два захода, потом соединяла бы их в одну таблицу и печатала результат. Функцию запускаьб я научился при помощи LSD, а как теперь получить из неё значения, как будто это был бы запрос ?? |
| Автор: LSD 24.3.2006, 12:48 |
| Результат первого запроса не эквивалентен результатам вторых 2-х. Т.к. первый порождает декартово произведение таблиц, а второй и третий нет. Так что поподробней: скрипт создания таблицы, текст запроса, и что надо олучить в итоге. |
| Автор: DEER 24.3.2006, 13:22 | ||||||||||
| млин комерческая тайна короче есть список операторов
каждому оператору соответствует свой диапазон номеров
в БД пишутся звонки (как они пишутся не важно, и вся структура таблицы куда пишутся тоже
нужно получить список где будет - оператор, - продолжительность входящих звонков, - продолжительность исходящих звонков. запрос написал такой для исходящих звонков
для входящих звонков
теперь это дело хочется в функции объеденить и вывести в DataGrid Toad'а записей там видимо - невидимо Нормуль объяснил? Добавлено @ 13:37 тока проблема не в этом. как функцию написать я уж сооброжу, мне бы узнать как эту функцию вызвать, чтобы результат её работы был как у запроса, те пишу что то в SQLEditor'е, запускаю, результат напечан в DataGrid |
| Автор: LSD 26.3.2006, 13:36 | ||
| По поводу производительности, не выйдет у тебя сделать объединение быстрее чем это сделает сам Oracle. Лучше всего просто попробовать оптимизировать запрос: построить индексы если это уже не сделано, декартово произведение заменить на join и т.п. И по поводу запросов те два запроса что ты привел полностью идентичны. А получить коллекцию в виде курсора можно так:
|
| Автор: DEER 27.3.2006, 08:41 | ||
Упс. ошипка вышла проблему решил так. Уже в програме посылаю два запроса на сервер, и в программе же объединяю результаты запросов. Просто не оставалось ничего другого, надо было сдавать работающий отчет.... |
| Автор: BIZ0N 27.5.2006, 02:12 | ||||||
| Помогите начинающему проблема похожая. поэтому создавать новую тему не стал. субд Oracle 9i HOME использую PL*SQL Worksheet + пытаюсь освоить PL/SQL Developer
В PL/SQL Developer обьект создается без ошибок, а вот в PL*SQL Worksheet кричит, что тело создано с ошибками компиляци... да и вообще последний глючит, по запросу:
PL/SQL Developer выдает более сотни пакетов, и среди них rrrac_admin со статусом VALID, а вот PL*SQL Worksheet находит только 2 обьекта, при этом rrrac_admin имеет статус INVALID Кроме того, не могу проверить работу функции в PL/SQL Developer использую конструкцию вида (пишу по памяти, комп с инетом и комп с Oracle находяться далеко друг от друга
PL/SQL Developer вываливает снизу список переменных (а именно result)? а вот выборки там не видно ... видимо всетаки глючит не PL*SQL, а PL/SQL Developer |
| Автор: batigoal 27.5.2006, 12:28 |
| Вполне возможно, что причина в слешах ('/'). По крайней мере, в PL/SQL Developer этот код будет корректно выполнен в Command Window и ошибочно - в SQL Window. Посмотри в PL/SQL Developer'е заголовок пакета rrrac_admin. не исключено, что к нему там прилеплена оставшаяся часть файла. |
| Автор: BIZ0N 27.5.2006, 15:22 | ||
| не ... в девелопере работаю только в sql window (имею склонность к альтруизму а вот в родном для оракла pl*sql у меня выполнить этот код не получается ... и вообще в отличии от девелопера он показывает что тело пакета - "INVALID" почему такая разница ? и там и там работаю из под пользователя system... почему один инструмент по запросу:
мне выберает 2 пакета, а другой около сотни (на глаз прикинул P.S.: ОФФТОП: после выполнения таких пакетных процедур нухно закрывать курсор который они возвращают ? |
| Автор: batigoal 27.5.2006, 16:15 |
| Я же сказал, проверь текст пакета в девелопере. У нас бывало такое, что пакет виден, как валидный, а исходник у него неправильный. И попробуй выполнить тот же скрипт в Command window девелопера. |
| Автор: Sqlninja 28.5.2006, 22:19 |
| 1) Не используйте PL*SQL Workshit. 2) только 2 пакета под SYSTEM быть не может. покрутите скроллинг. |
| Автор: batigoal 28.5.2006, 22:46 |
Почему? Мы вполне успешно с ним работаем. |
| Автор: Sqlninja 28.5.2006, 23:32 |
Эээ.. не знаю. Обьективных причин нет. Но мне не нравится. |
| Автор: batigoal 29.5.2006, 08:10 |
Серьезные системы требуют серьезных усилий при изучении, от этого никуда не деться. |
| Автор: Sqlninja 29.5.2006, 10:26 | ||
Ни в коем случае не хотел Вас обидеть. Я работаю с Oracle 5 лет, и иногда совершаю совершенно идиотские ошибки.
Это все системы другого масштаба, даже Cache по мощности не дотягивает. Конечно, поначалу Вам все покажется намного сложнее чем Вы привыкли. Но когда работаешь с терабайтными базами в сотни миллионов записей, где хранится коммерческая информация, к которой нужно как то дать доступ сотням пользователей, становится ясно, ничего ребята не перемудрили а нашли единственно верное решение. |