Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Поможите с процедурой.  [new]
A.B
Member

Откуда: Москва
Сообщений: 126
Доброго дня всем.
Если у кого есть минутка, помогите с процедуркой для Оракла.

Итак. Есть оригинальная процедура в SQL. Она работает и все с ней хорошо.
Её текст:
CREATE PROCEDURE vtbiGetLastFault
@nKey_Id int
AS
BEGIN
declare @nCode int,
@szReason char(1024),
@nIndex int
SELECT @nIndex = MAX(nIndex) FROM Fault WHERE nParent = @nKey_Id
if @nIndex IS NULL
begin
SET @nCode = 96
SET @szReason = 'Операция не может быть ыполнена.'
end
else
SELECT @nCode = nCode, @szReason = szReason FROM Fault WHERE nIndex = @nIndex

SET NOCOUNT ON;
SELECT @nCode, @szReason
END

Задача - перенести её в Оракл.

При помощи мигратион тулсов она вроде как перекомпилилась в Ораклевый синтаксис и вроде как по смыслу даже очень похоже.
но при компиляции выдает ошибку на отсутствие некого Omwb_emulation.globalPkg.RCT1. Вообщем оно и понятно, нет такой переменной. Но как поменять это чтоб работало, не сооброжу:( не монстр я в оракле...

CREATE OR REPLACE PROCEDURE VTBIGETLASTFAULT(
nKey_Id IN NUMBER DEFAULT NULL,
RC1 IN OUT Omwb_emulation.globalPkg.RCT1)
AS
nCode NUMBER(10,0);
szReason CHAR(1024);
nIndex NUMBER(10,0);
BEGIN
BEGIN
SELECT MAX(nIndex)
INTO nIndex
FROM Fault
WHERE nParent = nKey_Id;
IF nIndex IS NULL THEN
BEGIN
nCode := 96;
szReason := 'Операция не может быть выполнена.';

END;

ELSE
FOR rec IN ( SELECT nCode, szReason
FROM Fault
WHERE nIndex = nIndex)
LOOP
nCode := rec.nCode ;
szReason := rec.szReason ;
END LOOP;
END IF;
NULL;
OPEN RC1 FOR
SELECT nCode, szReason FROM DUAL;
END;
END VTBIGETLASTFAULT;

Помогите плиз
21 апр 08, 12:48    [5573526]     Ответить | Цитировать Сообщить модератору
 Re: Поможите с процедурой.  [new]
ALocky
Member

Откуда: Понаехал из Подмосковья
Сообщений: 747
CREATE OR REPLACE PROCEDURE VTBIGETLASTFAULT(
  nKey_Id IN NUMBER DEFAULT NULL,
  RC1 IN OUT Omwb_emulation.globalPkg.RCT1)
AS
nCode NUMBER(10,0);
szReason CHAR(1024);
nIndex NUMBER(10,0);
BEGIN
  BEGIN
    SELECT MAX(nIndex)
    INTO nIndex
    FROM Fault 
    WHERE nParent = nKey_Id;
    IF nIndex IS NULL THEN
      BEGIN
        nCode := 96;
        szReason := 'Операция не может быть выполнена.';
      END;
    ELSE
      FOR rec IN ( 
        SELECT nCode, szReason
        FROM Fault 
        WHERE nIndex = nIndex)
      LOOP  
        nCode := rec.nCode ; 
        szReason := rec.szReason ; 
      END LOOP;
    END IF;
    NULL; 
    OPEN RC1 FOR SELECT nCode, szReason FROM DUAL;
  END;
END VTBIGETLASTFAULT;
Omwb_emulation.globalPkg.RCT1 Замените на sys_refcursor
21 апр 08, 12:53    [5573568]     Ответить | Цитировать Сообщить модератору
 Re: Поможите с процедурой.  [new]
karcun
Member

Откуда:
Сообщений: 46
а у Вас в схеме Omwb_emulation => пакет globalPkg => переменная пакета RCT1 объявлено?
это просто навскидку.
щас еще почитаем.
21 апр 08, 12:55    [5573583]     Ответить | Цитировать Сообщить модератору
 Re: Поможите с процедурой.  [new]
logmnr
Member

Откуда:
Сообщений: 69
A.B
выдает ошибку на отсутствие некого Omwb_emulation.globalPkg.RCT1. Вообщем оно и понятно, нет такой переменной.


Это не переменная, а тип переменной.
21 апр 08, 12:56    [5573598]     Ответить | Цитировать Сообщить модератору
 Re: Поможите с процедурой.  [new]
A.B
Member

Откуда: Москва
Сообщений: 126
ALocky

Omwb_emulation.globalPkg.RCT1 Замените на sys_refcursor


Щас попробую.
21 апр 08, 13:08    [5573695]     Ответить | Цитировать Сообщить модератору
 Re: Поможите с процедурой.  [new]
A.B
Member

Откуда: Москва
Сообщений: 126
karcun
а у Вас в схеме Omwb_emulation => пакет globalPkg => переменная пакета RCT1 объявлено?
это просто навскидку.
щас еще почитаем.


Извеняюсь если что не так скажу, как уже говорил не на короткой ноге я с Ораклом.

В том то и дела, что Схема в Оракле (БД) называется VTBI.
Я именно в неё прогружаю скрипт, созданный посредством МигратионТулс из SQL.

Т.е. утилиткой, выгружаю из SQL процедуру в формате оракла и пытаюсь собственно прокатить её в оракл. В нужную схему.

И вот как раз эта утилитка при "переводе" синтаксиса процедуры из оракла в SQL добавляет этот самый пакет Omwb_emulation. Что это такое, и что такое вообще пакеты в оракле я, простите, пока не знаю :( И вообще, зачем он, этот пакет в процедуре, если в SQL все это написанно достаточно просто, без каких-либо доп. пакетов.
21 апр 08, 13:13    [5573746]     Ответить | Цитировать Сообщить модератору
 Re: Поможите с процедурой.  [new]
A.B
Member

Откуда: Москва
Сообщений: 126
Простите, из SQL-в Oracle. ...

"переводе" синтаксиса процедуры из оракла в SQL добавляет этот самый пакет Omwb_emulation
21 апр 08, 13:15    [5573766]     Ответить | Цитировать Сообщить модератору
 Re: Поможите с процедурой.  [new]
A.B
Member

Откуда: Москва
Сообщений: 126
ALocky
[src oracle]
Omwb_emulation.globalPkg.RCT1 Замените на sys_refcursor


Спасибо большое! все работает.
SQL.ru форева и зе бест:)
21 апр 08, 13:45    [5573992]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить