Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Исследование возможности миграции с oracle на DB2 / 11 сообщений из 11, страница 1 из 1
01.07.2010, 18:49
    #36718571
sle
sle
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исследование возможности миграции с oracle на DB2
Исследую возможности миграции нашего приложения с oracle на DB2.
Один из затыков: DB2 9.7 со включенной совместимостью с PL/SQL ругается на функцию ltrim с двумя аргументами:

select '"'||ltrim('0001000','0')||'"' from dual;

SQL0440N No authorized routine named "LTRIM" of type "FUNCTION" having compatible arguments was found.

Ладно, пробую написать свой аналог (пока заглушка) :
create or replace function ltrim(s varchar,f varchar) return varchar as
begin
return null;
end;
/
Функция успешно создается.
Но при попытке сделать вышеприведенный select - ошибка та-же самая.
В чем проблема?
Кстати, попытался любые свои функции создать - та-же беда: создаётся успешно, но при попытке вызова ругается точно так-же.

Где беда-то?
...
Рейтинг: 0 / 0
02.07.2010, 09:23
    #36719215
BuryCommoner
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исследование возможности миграции с oracle на DB2
Скорее всего функция была создана со схемой пользователя-создателя. Например: db2admin.ltrim. В клиентском приложении можно установить схему по умолчанию. Вроде бы SET SCHEMA.
...
Рейтинг: 0 / 0
02.07.2010, 10:59
    #36719402
sle
sle
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исследование возможности миграции с oracle на DB2
Да, спасибо, проблема оказалась в этом.
Когда поставил в вызове функции префикс схемы перед именем функции всё заработало.
Но без префикса не работает, даже если функция создана в текущей схеме все равно надо ставить имя схемы при вызове.

Ну это неправильно как-то. Что мне теперь, везде где функции вызываются префикс их схемы ставить?

Может ещё где какая настройка для этого есть?
...
Рейтинг: 0 / 0
02.07.2010, 12:25
    #36719658
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исследование возможности миграции с oracle на DB2
sleКогда поставил в вызове функции префикс схемы перед именем функции всё заработало.
Но без префикса не работает, даже если функция создана в текущей схеме все равно надо ставить имя схемы при вызове.

Ну это неправильно как-то. Что мне теперь, везде где функции вызываются префикс их схемы ставить?

Может ещё где какая настройка для этого есть?Функция создаётся в текущей схеме, посмотреть которую можно так:
Код: plaintext
values current schema;
установить:
Код: plaintext
set current schema YOUR_SCHEMA_NAME;
Посмотреть, где создалась функция, можно так:
Код: plaintext
select routineschema from syscat.routines where routinename='LTRIM' and parm_count= 2 ;
...
Рейтинг: 0 / 0
02.07.2010, 19:52
    #36720744
sle
sle
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исследование возможности миграции с oracle на DB2
Большое спасибо, команды ценные, особенно когда только начинаешь.

Но как объяснить всё это?

CLPPlus: Version 1.1
Copyright (c) 2009, IBM CORPORATION. All rights reserved.

SQL> values current schema;

1
--------------------------------------------------
DB2INST1

DB250000I: The command completed successfully.

SQL> create or replace function foo return varchar2 as
2 begin
3 return 'foo';
4 end;
5 /

DB250000I: The command completed successfully.

SQL> select foo from dual;

1
--------------------------------------------------
foo
SQL> set current schema YOUR_SCHEMA_NAME;

DB250000I: The command completed successfully.

SQL> select foo from dual;

1
--------------------------------------------------
foo
SQL> create or replace function foo1 return varchar2 as
2 begin
3 return 'foo1';
4 end;
5 /

DB250000I: The command completed successfully.

SQL> select foo1 from dual;
ERROR near line 1:
SQL0206N "FOO1" is not valid in the context where it is used.
SQL> select YOUR_SCHEMA_NAME.foo1 from dual;

1
--------------------------------------------------
foo1
SQL>

Получается, чтобы мне вызывать функции без префикса мне нужно их создавать в схеме DB2INST1 ?
А если я создаю функции в другой схеме, то даже находясь в этой другой схеме мне обязательно префикс схемы перед функцией указывать???
...
Рейтинг: 0 / 0
03.07.2010, 06:45
    #36721158
BuryCommoner
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исследование возможности миграции с oracle на DB2
Создавайте все функции под одним пользователем или явно указывайте схему:
Код: plaintext
CREATE OR REPLACE FUNCTION my_schema.funcname() ...
В клиентском приложении вам нужно будет добавить код инициализации:
Код: plaintext
SET SCHEMA = my_schema -- или схема пользователя-создателя функций
тогда при неквалифицированных вызовах, функции будут искаться со схемой my_schema.
...
Рейтинг: 0 / 0
03.07.2010, 11:09
    #36721235
sle
sle
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исследование возможности миграции с oracle на DB2
Не получается!
Все равно требует имя схемы перед функцией!

CLPPlus: Version 1.1
Copyright (c) 2009, IBM CORPORATION. All rights reserved.

SQL> SET SCHEMA = MY_SCHEMA;

DB250000I: The command completed successfully.

SQL> VALUES CURRENT SCHEMA;

1
--------------------------------------------------
MY_SCHEMA

DB250000I: The command completed successfully.

SQL> create or replace function MY_SCHEMA.FOO(s varchar2,f varchar2) return varchar2 as
2 begin
3 return 'foo - '||s||' '||f;
4 end;
5 /

DB250000I: The command completed successfully.

SQL> VALUES CURRENT SCHEMA;

1
--------------------------------------------------
MY_SCHEMA

DB250000I: The command completed successfully.

SQL> select '"'||FOO('1','0')||'"' from dual;
ERROR near line 1:
SQL0440N No authorized routine named "FOO" of type "FUNCTION" having compatible arguments was found.
SQL> select '"'||MY_SCHEMA.FOO('1','0')||'"' from dual;

1
--------------------------------------------------
"foo - 1 0"
SQL>
...
Рейтинг: 0 / 0
03.07.2010, 14:30
    #36721372
knudsen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исследование возможности миграции с oracle на DB2
sle,

SET CURRENT SQLID ='YOUR_SCHEMA' - не пробовали? Хотя это, кажется тоже самое...
...
Рейтинг: 0 / 0
03.07.2010, 15:47
    #36721402
sle
sle
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исследование возможности миграции с oracle на DB2
knudsen,

Спасибо, попробовал - все то-же самое.

Ещё один глупый вопрос: При помощи IBM Data Studio создал пользователя, но зайти под ним не могу, так как не знаю пароля. При создании пользователя пароль не нашёл где указывается.
Соответственно вопрос: как пользователю поменять пароль? Не тому под которым зашёл, а другому.
...
Рейтинг: 0 / 0
03.07.2010, 20:50
    #36721568
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исследование возможности миграции с oracle на DB2
sle,

1.
set schema задаёт схему по умолчанию для создаваемых объектов.
Но когда идёт обращение к функции, то она ищется в списке, содержащемся в CURRENT PATH.
По умолчанию там системные схемы и схема текущего пользователя.
Добавить туда свою схему можно:
Код: plaintext
set path = current path, MY_SCHEMA;
2.
У db2 нет своих пользователей и групп - оно берёт их из внешних источников, по-умолчанию из ОС, где вам и надо заводить пользователя.
...
Рейтинг: 0 / 0
05.07.2010, 05:50
    #36722447
BuryCommoner
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исследование возможности миграции с oracle на DB2
Век живи - век учись. Вроде очевидная вещь, и то подводные камни есть :)
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Исследование возможности миграции с oracle на DB2 / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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