Текущее время: Вс, июл 20 2025, 18:39

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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