Прямой SQL

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Прямой SQL

Сообщение Den »

Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Прямой SQL

Сообщение 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 лучше разработчиков Вам озадачить - приблуда специфичная это и редко используемая,видимо. И здесь можете долго прождать ответа
savov
Местный житель
Сообщения: 589
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Воронеж ОАО Верофарм. Воронеж

Re: Прямой SQL

Сообщение savov »

Процедура вызывается потому, что в запросе select не проходит update, ругается сам Оракл. Что есть такое UDF?
savov
Местный житель
Сообщения: 589
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Воронеж ОАО Верофарм. Воронеж

Re: Прямой SQL

Сообщение 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 ошибку - синтаксическая ошибка "@".

Возожно, что надо по-другому записать запрос, но найти не могу.
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Re: Прямой SQL

Сообщение m0p3e »

Вот здесь выкладывал как читать данные через линки в оракле.
http://www.tyumbit.ru/gal_forum/viewtop ... =8&t=10938
savov
Местный житель
Сообщения: 589
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Воронеж ОАО Верофарм. Воронеж

Re: Прямой SQL

Сообщение savov »

mop3e, a как сие под JS запустить? Мне JS шибко нужен
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Re: Прямой SQL

Сообщение m0p3e »

С JS дела не имел. Не подскажу.
savov
Местный житель
Сообщения: 589
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Воронеж ОАО Верофарм. Воронеж

Re: Прямой SQL

Сообщение 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 почему-то нет.
zna
Местный житель
Сообщения: 552
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Челябинск
Контактная информация:

Re: Прямой SQL

Сообщение 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;
    }
...
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Прямой SQL

Сообщение Den »

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


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

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

SQL Function IntToDateString (_DateInt: integer) : string;
      var res  : string[10];
    {
      res:='111111';
      return res;
    }
zna
Местный житель
Сообщения: 552
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Челябинск
Контактная информация:

Re: Прямой SQL

Сообщение 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!
zna
Местный житель
Сообщения: 552
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Челябинск
Контактная информация:

Re: Прямой SQL

Сообщение zna »

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

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

SQL Function IntToDateString (_DateInt: integer) : string;
       var res  : string[10];
        {
          res:=string(_DateInt);                      //Здесь пустое значение возвращает
          return res;
        }
Пробовал разные преобразования: varchar, to_char- пустое значение возвращает.
Вообще смысл функции в том, чтобы получить из набора записей dsql сразу строковое значение даты.
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Прямой SQL

Сообщение Den »

а в чем глубокий смысл такой функции, если не секрет - получить дату в строковом виде в dsql ?
zna
Местный житель
Сообщения: 552
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Челябинск
Контактная информация:

Re: Прямой SQL

Сообщение 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;}
...
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: Прямой SQL

Сообщение Den »

т.е. если Вы пишете , например, в саппорт

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

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