Текущее время: Пн, июл 21 2025, 06:58

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
 Заголовок сообщения: Ошибка при выполнении процедуры
СообщениеДобавлено: Ср, июн 30 2010, 12:11 
Специалист
Специалист

Зарегистрирован:
Ср, дек 07 2005, 09:18
Сообщения: 141
Откуда: Запорожье
Добрый день.
Подсоединяюсь к БД "Парус " при выполнении процедуры вываливается дамп:

Code:
Database error text........: "ORA-06550: line 1, column 7:#PLS-00306: wrong   
  number or types of arguments in call to 'P_VALTURNS_CREATE'#ORA-06550: line 1
  column 7:#PL/SQL: Statement ignored"                                         
Database error code........: 6550                                             
Triggering SQL statement...: "EXECUTE PROCEDURE P_VALTURNS_CREATE"           
Internal call code.........: "[DBDS/NEW DSQL]"   


Для меня не понятно, в каком месте ошибка, что может означать #PLS-00306????
Помогите советом.

Нашёл описание ошибки, но проблемма не решилась, наверное типы не совпадают, Oracle и ABAP.
Цитата:
Сама ошибка говорит, что неправильное число или неправильные типы аргументов пытаешься передать в процедуру


Собственно полное описание
Цитата:
Oracle Database 10g R1 : PLS-00306

PLS-00306

Wrong number or types of arguments in call to 'string'
Неверное количество или типы аргументов для вызова [значение]

Причина

Эта ошибка возникает, когда вызов подпрограммы не может быть отнесен ни к одному из объявлений имени этой подпрограммы. Имя подпрограммы может быть указано с ошибкой, или параметр имеет невернй тип данных. Возможно объявление некорректно или объявление размещено неверно в структуре блоков.

Действия

Проверьте имя и объявление подпрограммы. Убедитесь в корректности вызова, корректности типа данных параметров. Убедитесь, что это не имя встроенной функции.

Источник:
Oracle Corporation Manual: Database Error Reference: A90202-02


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Ошибка при выполнении процедуры
СообщениеДобавлено: Ср, июн 30 2010, 16:34 
Специалист
Специалист

Зарегистрирован:
Ср, дек 07 2005, 09:18
Сообщения: 141
Откуда: Запорожье
Собственно проблемма так и не решилась.
Ради эксперемента создали в Парусе новую процедуру с одним параметром типа VARCHAR2.


Code:
data xx(000099) TYPE c.

    EXEC SQL.
        EXECUTE PROCEDURE UDO_PROV  ( in: xx )
    ENDEXEC.


Ошибка всё та же

Code:
Database error text........: "ORA-06550: line 1, column 7:#PLS-00306: wrong   
  number or types of arguments in call to 'UDO_PROV'#ORA-06550: line 1, column 
  7:#PL/SQL: Statement ignored"                                                 
Database error code........: 6550                                             
Triggering SQL statement...: "EXECUTE PROCEDURE UDO_PROV"                     
Internal call code.........: "[DBDS/NEW DSQL]"


HELP!!!!


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Ошибка при выполнении процедуры
СообщениеДобавлено: Ср, июн 30 2010, 16:43 
Специалист
Специалист

Зарегистрирован:
Пт, окт 20 2006, 16:39
Сообщения: 230
описание самой процедуры UDO_PROV приведите, пожалуйста


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ошибка при выполнении процедуры
СообщениеДобавлено: Ср, июн 30 2010, 16:51 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
Razum написал(а):
Собственно проблемма так и не решилась.
Ради эксперемента создали в Парусе новую процедуру с одним параметром типа VARCHAR2.


Code:
data xx(000099) TYPE c.

    EXEC SQL.
        EXECUTE PROCEDURE UDO_PROV  ( in: xx )
    ENDEXEC.


...

Вроде не in: хх а in :хх

_________________
"После" - не значит "вследствие"


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ошибка при выполнении процедуры
СообщениеДобавлено: Ср, июн 30 2010, 17:12 
Специалист
Специалист

Зарегистрирован:
Ср, дек 07 2005, 09:18
Сообщения: 141
Откуда: Запорожье
Цитата:
Вроде не in: хх а in :хх
[/quote]

Да, тут я ошибся.
Вот код
Code:
CREATE OR REPLACE PROCEDURE PARUS.UDO_PROV
(
S        IN VARCHAR2,
S2       OUT VARCHAR2
)
AS

BEGIN
S2:=S+S;
END;


Когда data xx(000099) TYPE c - пишит новую ошибку - несоответсвие строкового и числового типа.
Когда data xx(000099) TYPE i - ошибки нет, он складывает числа.
Странно. Админ Паруса грит что это наверное у нас АБАП так переменные передаёт.
Кто что подскажет?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Ошибка при выполнении процедуры
СообщениеДобавлено: Ср, июн 30 2010, 17:25 
Специалист
Специалист

Зарегистрирован:
Пт, окт 20 2006, 16:39
Сообщения: 230
а что у вас в хх при возникновении ошибки?

попробуте сделать перед вызовом condence xx.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ошибка при выполнении процедуры
СообщениеДобавлено: Ср, июн 30 2010, 17:32 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
Razum написал(а):
Да, тут я ошибся.
Вот код
Code:
CREATE OR REPLACE PROCEDURE PARUS.UDO_PROV
(
S        IN VARCHAR2,
S2       OUT VARCHAR2
)
AS

BEGIN
S2:=S+S;
END;


Когда data xx(000099) TYPE c - пишит новую ошибку - несоответсвие строкового и числового типа.
Когда data xx(000099) TYPE i - ошибки нет, он складывает числа.
Странно. Админ Паруса грит что это наверное у нас АБАП так переменные передаёт.
Кто что подскажет?

Я так думаю стоит попробовать XX объявить через string

_________________
"После" - не значит "вследствие"


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ошибка при выполнении процедуры
СообщениеДобавлено: Чт, июл 01 2010, 08:37 
Специалист
Специалист

Зарегистрирован:
Ср, дек 07 2005, 09:18
Сообщения: 141
Откуда: Запорожье
Написал так
Code:
data: xx TYPE string,
      yy TYPE string.

xx = 'HelloWorld'.
TRY.
    EXEC SQL.
        EXECUTE PROCEDURE UDO_PROV  ( IN :XX, OUT :YY )
    ENDEXEC.

    ENDTRY.

  EXEC SQL.
   SET CONNECTION DEFAULT
  ENDEXEC.


Код ошибки

Code:
Database error text........: "ORA-06502: PL/SQL: numeric or value error:   
  character to number conversion error#ORA-06512: at "PARUS.UDO_PROV", line 
  9#ORA-06512: at line 1"                                                   
Database error code........: 6502                                           
Triggering SQL statement...: "EXECUTE PROCEDURE UDO_PROV"                   
Internal call code.........: "[DBDS/NEW DSQL]" 


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Ошибка при выполнении процедуры
СообщениеДобавлено: Чт, июл 01 2010, 10:00 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, апр 13 2006, 12:32
Сообщения: 1503
Откуда: Питер
Попробуйте стринги так сложить.
CONCAT(s2, s);

_________________
С уважением, VGA
Мой блог


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ошибка при выполнении процедуры
СообщениеДобавлено: Чт, июл 01 2010, 10:08 
Специалист
Специалист

Зарегистрирован:
Пт, окт 20 2006, 16:39
Сообщения: 230
vga написал(а):
Попробуйте стринги так сложить.
CONCAT(s2, s);

там вроде такой оператор используется:
Code:
S2 := S || S.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ошибка при выполнении процедуры
СообщениеДобавлено: Чт, июл 01 2010, 10:17 
Специалист
Специалист

Зарегистрирован:
Ср, дек 07 2005, 09:18
Сообщения: 141
Откуда: Запорожье
demst написал(а):
vga написал(а):
Попробуйте стринги так сложить.
CONCAT(s2, s);

там вроде такой оператор используется:
Code:
S2 := S || S.


УРААААААААААААААААААА!!!! Заработало!Я ИДИЁТ, УБЕЙТЕ МИНЯ КТО-НИБУДЬ!Я ИДИЁТ, УБЕЙТЕ МИНЯ КТО-НИБУДЬ!Я ИДИЁТ, УБЕЙТЕ МИНЯ КТО-НИБУДЬ!Я ИДИЁТ, УБЕЙТЕ МИНЯ КТО-НИБУДЬ!Я ИДИЁТ, УБЕЙТЕ МИНЯ КТО-НИБУДЬ!!
Спасибо ребята!!!!


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Ошибка при выполнении процедуры
СообщениеДобавлено: Чт, июл 01 2010, 11:58 
Специалист
Специалист

Зарегистрирован:
Ср, дек 07 2005, 09:18
Сообщения: 141
Откуда: Запорожье
Есть ещё один вопрос.
Как правильно передать переменную Дата.
Пробовал следующие варианты

на эти две
CONCATENATE '''' '01.05.2010' '''' ',' '''' 'DD.MM.YYYY' '''' into DDATE_FROM.
DDATE_FROM = '01.05.2010','DD.MM.YYYY'.

Code:
Database error text........: "ORA-01858: a non-numeric character was found 
  where a numeric was expected#ORA-06512: at line 1"                         
Database error code........: 1858                                           
Triggering SQL statement...: "EXECUTE PROCEDURE UDO_PROV"                   
Internal call code.........: "[DBDS/NEW DSQL]" 



На эту попытку
DDATE_FROM = '01052010'.
выдает
Code:
Database error text........: "ORA-01861: literal does not match format   
string#ORA-06512: at line 1"                                             
Database error code........: 1861                                         
Triggering SQL statement...: "EXECUTE PROCEDURE UDO_PROV"                 
Internal call code.........: "[DBDS/NEW DSQL]"       



Функцию в Парусе видоизменили

Code:
CREATE OR REPLACE PROCEDURE PARUS.UDO_PROV
(
S        IN DATE,
S2       OUT VARCHAR2
)
AS

BEGIN
S2:=S;
END;


Если спросите зачем я это делаю, то отвечу:
Надо запустить процедуру, в Парусе, с 37 переменными, т.к. там 3 вида переменных, VARCHAR2, DATE и number, то глючит у меня Дата.

Получилось вот так
Code:
    EXEC SQL.
        EXECUTE PROCEDURE UDO_PROV  ( IN :'01-APR-10', OUT :YY )
    ENDEXEC.

ну и на вывод получил тоже самое, что и требовалось
01-APR-10
вот теперь думаю что делать , так и использовать или мож кто что посоветует.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Ошибка при выполнении процедуры
СообщениеДобавлено: Чт, июл 01 2010, 13:49 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
Razum написал(а):
Есть ещё один вопрос.
Как правильно передать переменную Дата.

...

Не знаю насколько это правильно, но, передавайте дату как строку и используйте функцию преобразования TO_DATE
Примерно так
Code:
        EXECUTE PROCEDURE UDO_PROV  ( IN TO_DATE( :XX ), OUT :YY )

_________________
"После" - не значит "вследствие"


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB