Страница 12 из 19

Re: Прямой SQL

Добавлено: 03 сен 2012, 11:56
Den

Re: Прямой SQL

Добавлено: 03 сен 2012, 12:03
Den
savov писал(а): ...
3. Средствами TOAD изменил функцию:

Код: Выделить всё

CREATE OR REPLACE FUNCTION "S$UPKATBOX"(NRECREC IN VARCHAR2, MAXC IN NUMBER) RETURN NUMBER IS

procedure UPDKATBOX_PR is
pragma autonomous_transaction;
begin
UPDATE VRN.KATBOX SET FCOUNT=MAXC WHERE FNREC=NRECREC;
COMMIT;
END;

BEGIN
UPDKATBOX_PR;
RETURN 1;
END;
А это так зачем то нужно так ...вызывать внутри S$UPKATBOX процедуру UPDKATBOX_PR ? Вроде как строчку :
UPDATE VRN.KATBOX SET FCOUNT=MAXC WHERE FNREC=NRECREC;
может реализовать просто в UDF S$UPKATBOX это попробовать ?
А вообще с дскл под JS лучше разработчиков Вам озадачить - приблуда специфичная это и редко используемая,видимо. И здесь можете долго прождать ответа

Re: Прямой SQL

Добавлено: 03 сен 2012, 12:25
savov
Процедура вызывается потому, что в запросе select не проходит update, ругается сам Оракл. Что есть такое UDF?

Re: Прямой SQL

Добавлено: 21 сен 2012, 16:40
savov
Тема продолжается.
Попробовал получить данные в одной базе из другой.
В Oracle сделал

Код: Выделить всё

create database link vrnt connect to savinkov IDENTIFIED BY jnxtn1967 using 'vrnt';
Делаю запрос в TOAD - работает.
В Галактике запрос

Код: Выделить всё

sstr2 = ' select katmc.name from katmc@vrnt  where katmc.name='+names+';';   

дает в log ошибку - синтаксическая ошибка "@".

Возожно, что надо по-другому записать запрос, но найти не могу.

Re: Прямой SQL

Добавлено: 21 сен 2012, 17:54
m0p3e
Вот здесь выкладывал как читать данные через линки в оракле.
http://www.tyumbit.ru/gal_forum/viewtop ... =8&t=10938

Re: Прямой SQL

Добавлено: 21 сен 2012, 18:41
savov
mop3e, a как сие под JS запустить? Мне JS шибко нужен

Re: Прямой SQL

Добавлено: 24 сен 2012, 10:47
m0p3e
С JS дела не имел. Не подскажу.

Re: Прямой SQL

Добавлено: 27 сен 2012, 18:25
savov
m0p3e писал(а):С JS дела не имел. Не подскажу.
После вмешательства ТП:
1. Процедуру сначала создаем в Галатике ( МОЖНО! в саппорте дать запрос SQL FUNCTION имя(параметры) : тип {})
2. Проверяем права и даем права.
3. Изменяем в оракле
4. Проверяем работоспособность в SQL саппорта (например):

Код: Выделить всё

sql select ukat(#comp(562949953421323),0) from katbox;
.
5. Пишем в JS. Причем подметил, что вроде код:

Код: Выделить всё

   DSQL_BindCol(iHandle4_2, 1, 'double');
        if (DSQL_GetRecord(iHandle4_2)==0)
        {  Message(DSQL_GetFieldValueByNum(1),0);
          }
приводит к срабатыванию процедуры, а код без DSQL_BindCol, DSQL_GetRecord почему-то нет.

Re: Прямой SQL

Добавлено: 12 фев 2014, 12:41
zna
Den писал(а):Вообще вызов скалярной функции в dsql для получения просто какого то значения обратно "со своими прибабахами" ))
Нет возможности сейчас потестить на оракле, но под мсскуль работает вот так(по идее и под оракла должно тоже) на простом примере:

Код: Выделить всё

SQL Function GetKontrByMaxNrec (): comp;
var
 res  : comp;
{
  res:=(Select max(nrec) from katorg);
  return res;
}

Interface test_call_fun;
 create view
...
Den, прошу прокомментировать создание функции SQL Function .. (): компилятор ругается, говорит- ожидался QUERY

Код: Выделить всё

Interface RepLogistika 'Учёт транспорта "' escclose,blue,AlwaysReturn;
  Show at (1,1,240,40);
Var
  cBasedoc_, cKatorg_, cKndriver_, cTrans_, cKatorgT_, cKatsopr_, cDovFio_, cDover_: comp;
  sdtBasedo_, sKatorg_, sVodit_, sCo_, sNazna_: string;
#include Table.vpp
#include CreateView.vpp
SQL Function IntToDateString (_DateInt: integer) : string;
    {
      var res  : string[10];
      res:='111111';
      return res;
    }
...

Re: Прямой SQL

Добавлено: 12 фев 2014, 12:56
Den
дело в том, что SQl Function неизвестная штука для Interface :)
такую конструкцию необходимо регистрировть "отдельным батчем"
Вообщем, см. vipprog и там в поиске sql function и в самом низу "хранимые процедуры и функции"


Да и правильнее вот так :

Код: Выделить всё

SQL Function IntToDateString (_DateInt: integer) : string;
      var res  : string[10];
    {
      res:='111111';
      return res;
    }

Re: Прямой SQL

Добавлено: 12 фев 2014, 13:32
zna
Ну раз она интерфейсу неизвестна- вон её из интерфейса!

Код: Выделить всё

SQL Function IntToDateString (_DateInt: integer) : string;
       var res  : string[10];
        {
          res:='111111';
          return res;
        }
Interface RepLogistika 'Учёт транспорта "' escclose,blue,AlwaysReturn;
      Show at (1,1,240,40);
    Var
      cBasedoc_, cKatorg_, cKndriver_, cTrans_, cKatorgT_, cKatsopr_, cDovFio_, cDover_: comp;
      sdtBasedo_, sKatorg_, sVodit_, sCo_, sNazna_: string;
    #include Table.vpp
    #include CreateView.vpp
    ...
Так без ошибок скомпилировалось. Благодарю, Den!

Re: Прямой SQL

Добавлено: 13 фев 2014, 09:28
zna
Ещё вопрос по этой функции: как сделать, чтобы она, получив входной параметр Longint, вернула бы строку?

Код: Выделить всё

SQL Function IntToDateString (_DateInt: integer) : string;
       var res  : string[10];
        {
          res:=string(_DateInt);                      //Здесь пустое значение возвращает
          return res;
        }
Пробовал разные преобразования: varchar, to_char- пустое значение возвращает.
Вообще смысл функции в том, чтобы получить из набора записей dsql сразу строковое значение даты.

Re: Прямой SQL

Добавлено: 13 фев 2014, 11:32
Den
а в чем глубокий смысл такой функции, если не секрет - получить дату в строковом виде в dsql ?

Re: Прямой SQL

Добавлено: 13 фев 2014, 14:14
zna
Den писал(а):а в чем глубокий смысл такой функции, если не секрет - получить дату в строковом виде в dsql ?
Смысл в том, ради чего dsql применяется- скорость выборки. Можно, конечно, получить в переменную longint, далее на випе переделать в строку- но так не хочу. Вообщем так вот придумал: сделал три функции, получаю дату по кусочкам, потом собираю :???:

Код: Выделить всё

SQL Function IntToDateStringD (_DateInt: longint) : string;
      var res  : string[2];
    {res:= (_DateInt - (floor(_DateInt / 65536) * 65536 + floor((_DateInt - floor(_DateInt / 65536) * 65536) / 256) * 256)); return res;}
SQL Function IntToDateStringM (_DateInt: longint) : string;
      var res  : string[2];
    {res:= FLOOR((_DateInt - FLOOR(_DateInt / 65536) * 65536) / 256); return res;}
SQL Function IntToDateStringY (_DateInt: longint) : string;
      var res  : string[4];
    {res:= FLOOR(_DateInt / 65536); return res;}
Interface RepLogistika 'Учёт транспорта и перевозки ООО "ГК МКС"' escclose,blue,AlwaysReturn;
  Show at (1,1,240,40);
...
Function AssemdleDate(sD: string[2]; sM: string[2]; sY: string[4]): string[10]; {Result:= sD+'/'+sM+'/'+sY;}
...

Re: Прямой SQL

Добавлено: 13 фев 2014, 15:23
Den
т.е. если Вы пишете , например, в саппорт

Код: Выделить всё

sql select atl_lastdate from katorg;
у Вас в поле выборки число, а не дата ?