Гость
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Работа со сложными типами / 19 сообщений из 19, страница 1 из 1
11.08.2010, 16:03
    #36786359
dvksqlru
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа со сложными типами
Есть тип
Код: plaintext
CREATE OR REPLACE TYPE ABY_SYSTEM.CHARS_T IS TABLE OF VARCHAR2( 4000 );

есть функция, его эксплуатирующая, например
Код: plaintext
select  APP_UTIL.SEPARATE_RECORD(chars_t( 111 ,  222 ,  333 )) from dual;

Результат при выполнении в TOAD:
Код: plaintext
: 111 : 222 : 333 
, как и опланирповалось.

Однако, при добавлении в АРЕХ PL/SQL процедуры с кодом
Код: plaintext
APP_UTIL.SEPARATE_RECORD(chars_t( 111 ,  222 ,  333 ));
пишет:
Код: plaintext
1.
 1  error has occurred
ORA- 06550 : line  2 , column  1 : PLS- 00221 : 'SEPARATE_RECORD' is not a procedure or is undefined ORA- 06550 : line  2 , column  1 : PL/SQL: Statement ignored

В чем может быть дело?
...
Рейтинг: 0 / 0
11.08.2010, 17:05
    #36786549
suPPLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа со сложными типами
dvksqlruВ чем может быть дело?

В том, что это не процедура, а функция (собственно, это и говорит сообщение об ошибке). Соответственно, нужно чему-то этот результат присвоить.

Код: plaintext
1.
2.
3.
4.
declare
  l_result varchar2( 4000 );
begin
  l_result := APP_UTIL.SEPARATE_RECORD(chars_t( 111 ,  222 ,  333 ));
end;
...
Рейтинг: 0 / 0
11.08.2010, 17:20
    #36786588
dvksqlru
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа со сложными типами
suPPLer,

я немножко не с того конца подошел к вопросу, поэтому напутал в изложении. Суть в том, что передать сложный тип в качестве параметра не получается...

такая процедура
Код: plaintext
1.
2.
3.
4.
5.
6.
declare
  s varchar2( 4000 );
begin
  s := APP_UTIL.SEPARATE_RECORD(chars_t('111', '222', '333'));
  raise_application_error(- 20999 , s); 
end;
на ура исполняется в TOAD, однако не хочет работать в апекс.

Сообщение выбрасываю через исключение, что б по быстрому было видно в апексе.
...
Рейтинг: 0 / 0
11.08.2010, 17:29
    #36786624
dvksqlru
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа со сложными типами
и складывается впечатление, до выполнения самой функции дело не доходит.
...
Рейтинг: 0 / 0
11.08.2010, 17:31
    #36786634
Casufi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа со сложными типами
Похоже что Parsing Schema в настройках приложения в апексе не ABY_SYSTEM поєтому вам нужно обращаться к типу CHARS_T и к процедуре SEPARATE_RECORD по полному имени, включая схему.
Ну и гранты должны быть выданы
...
Рейтинг: 0 / 0
11.08.2010, 17:37
    #36786650
dvksqlru
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа со сложными типами
Casufi,

на всяк случай проверил и так (мало ли какие чудеса) - не канает.
...
Рейтинг: 0 / 0
11.08.2010, 17:40
    #36786658
Casufi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа со сложными типами
dvksqlruна всяк случай проверил и так (мало ли какие чудеса) - не канает.
Гранты ?
...
Рейтинг: 0 / 0
11.08.2010, 17:41
    #36786661
suPPLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа со сложными типами
dvksqlruи складывается впечатление, до выполнения самой функции дело не доходит.

?
Код: plaintext
1.
2.
3.
4.
5.
6.
declare
  s varchar2( 4000 );
  l_ch_t chars_t := chars_t('111', '222', '333');
begin
  raise_application_error(- 20999 , s); 
end;
...
Рейтинг: 0 / 0
11.08.2010, 17:46
    #36786686
dvksqlru
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа со сложными типами
Casufi,

все в порядке
...
Рейтинг: 0 / 0
11.08.2010, 17:48
    #36786691
dvksqlru
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа со сложными типами
suPPLer,

лучше, но самого сообщения не видно...
...
Рейтинг: 0 / 0
11.08.2010, 17:49
    #36786701
dvksqlru
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа со сложными типами
dvksqlru,

сорри, а s -то не инициализируется :)
...
Рейтинг: 0 / 0
11.08.2010, 17:56
    #36786723
dvksqlru
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа со сложными типами
вобщем не важно что делает функция - хоть так:

Код: plaintext
1.
2.
3.
4.
5.
6.
   FUNCTION SEPARATE_RECORD (P_ARRAY_OF_STRING CHARS_T)
      RETURN VARCHAR2
   AS
   BEGIN
     RETURN 'xxx';
   END SEPARATE_RECORD;

ошибка происходит при передаче сложного типа в качестве параметра.
...
Рейтинг: 0 / 0
11.08.2010, 17:57
    #36786727
Casufi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа со сложными типами
1) В упор не вижу в каком месте вы создаете переменную chars_t
2) Апекс не даст обратиться напрямую к пользовательскому типу

Я бы делал так
1) в интерфейсе пакета создал бы тип
type t_CHARS is table of VARCHAR2(4000);
и переменную
g_CHARS t_CHARS;

В Апексе в процессе создал бы переменную типа g_CHARS

declare
l_result varchar2(4000);
l_chars schema.package.g_CHARS%type;
begin
l_result := схема.APP_UTIL.SEPARATE_RECORD(l_chars(111, 222, 333));
end;
...
Рейтинг: 0 / 0
11.08.2010, 18:14
    #36786780
suPPLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа со сложными типами
Casufi1) В упор не вижу в каком месте вы создаете переменную chars_t
2) Апекс не даст обратиться напрямую к пользовательскому типу

1) Это не переменная, это пользовательский SQL-тип.
2) Это не так. :)

dvksqlru,

0. ABY_SYSTEM - это схема разбора по умолчанию для приложения?
1. Пакет APP_UTIL находится в ней же?

PS: Ради интереса только что создал тип, функцию с параметром этого типа и страницу в приложении с PL/SQL Dynamic Content-регионом. Схема разбора по умолчанию та же, в которой находятся тип и функция. Всё работает...
...
Рейтинг: 0 / 0
11.08.2010, 18:53
    #36786896
dvksqlru
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа со сложными типами
suPPLer,


suPPLer
0. ABY_SYSTEM - это схема разбора по умолчанию для приложения?
1. Пакет APP_UTIL находится в ней же?



да и да

А можно глянуть ваш код?
...
Рейтинг: 0 / 0
11.08.2010, 19:04
    #36786919
suPPLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа со сложными типами
dvksqlru,

конечно. Разве что я функцию в пакет не заворачивал.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
-- Создание типа
create type test_tab_type as table of number;
/
-- Создание функции
create function fu_test_ttt (p test_tab_type) return number
is
begin
  return  0 ;
end;
/
Код: plaintext
1.
2.
3.
-- Код региона типа PL/SQL Dynamic Content
begin
  htp.p(fu_test_ttt(test_tab_type( 1 , 2 , 3 )));
end;
...
Рейтинг: 0 / 0
11.08.2010, 19:05
    #36786922
suPPLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа со сложными типами
Да, и чтобы мы полностью здесь определились, назовите версии БД и APEX.
...
Рейтинг: 0 / 0
12.08.2010, 09:16
    #36787459
dvksqlru
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа со сложными типами
suPPLer,

Апекс - 4.0.0.00.46; БД - 10g XE

А проблема возникала, все-таки, с символьными данными.
...
Рейтинг: 0 / 0
12.08.2010, 09:41
    #36787491
dvksqlru
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа со сложными типами
dvksqlru,

с утра на свежую голову собрал пример в чистой схеме и новой апликухе - работает все как надо - значит где-то намудрил... тема закрыта.
...
Рейтинг: 0 / 0
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Работа со сложными типами / 19 сообщений из 19, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]