powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Исследование возможности миграции с oracle на DB2
11 сообщений из 11, страница 1 из 1
Исследование возможности миграции с oracle на DB2
    #36718571
sle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sle
Гость
Исследую возможности миграции нашего приложения с 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
Исследование возможности миграции с oracle на DB2
    #36719215
BuryCommoner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скорее всего функция была создана со схемой пользователя-создателя. Например: db2admin.ltrim. В клиентском приложении можно установить схему по умолчанию. Вроде бы SET SCHEMA.
...
Рейтинг: 0 / 0
Исследование возможности миграции с oracle на DB2
    #36719402
sle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sle
Гость
Да, спасибо, проблема оказалась в этом.
Когда поставил в вызове функции префикс схемы перед именем функции всё заработало.
Но без префикса не работает, даже если функция создана в текущей схеме все равно надо ставить имя схемы при вызове.

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

Может ещё где какая настройка для этого есть?
...
Рейтинг: 0 / 0
Исследование возможности миграции с oracle на DB2
    #36719658
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Исследование возможности миграции с oracle на DB2
    #36720744
sle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sle
Гость
Большое спасибо, команды ценные, особенно когда только начинаешь.

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

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
Исследование возможности миграции с oracle на DB2
    #36721158
BuryCommoner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создавайте все функции под одним пользователем или явно указывайте схему:
Код: plaintext
CREATE OR REPLACE FUNCTION my_schema.funcname() ...
В клиентском приложении вам нужно будет добавить код инициализации:
Код: plaintext
SET SCHEMA = my_schema -- или схема пользователя-создателя функций
тогда при неквалифицированных вызовах, функции будут искаться со схемой my_schema.
...
Рейтинг: 0 / 0
Исследование возможности миграции с oracle на DB2
    #36721235
sle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sle
Гость
Не получается!
Все равно требует имя схемы перед функцией!

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
Исследование возможности миграции с oracle на DB2
    #36721372
knudsen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sle,

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

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

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

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


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