Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / CREATE PROCEDURE / 10 сообщений из 10, страница 1 из 1
30.01.2006, 15:38
    #33511156
BN1978
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CREATE PROCEDURE
Возможно ли создание подобной процедуры в каше и как мог бы выглядеть возврат значений ?
CREATE PROCEDURE GETPARENTS (ID INTEGER)
RETURNS (DID INTEGER,OID INTEGER,NAME VARCHAR(60),CCOUNT INTEGER)
AS
BEGIN
WHILE (:ID > 0) DO
BEGIN
SELECT O.ID, O.PARENT, O.NAME, O.CCOUNT
FROM DETAIL O
WHERE O.ID = :ID
INTO :DID, :OID, :NAME , :CCOUNT;
ID = :OID;
SUSPEND;
END
END
...
Рейтинг: 0 / 0
30.01.2006, 15:50
    #33511212
ну я
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CREATE PROCEDURE
Да нет проблем. Студия, добавить запрос с опцией переопределить методы запроса. Переписываем три метода. Детали в документации.
http://127.0.0.1:1972/csp/docbook/DocBook.UI.Page.cls?KEY=GOBJ_queries
Тема - User-Written Class Queries
...
Рейтинг: 0 / 0
30.01.2006, 16:36
    #33511395
bn1978
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CREATE PROCEDURE
Так можно на любой вопрос ответить.

Мне нужен такой вариант, который можно было бы использовать чез ОДБС
например так Select * from GETPARENTS(:ID) или так CALL GETPARENTS(:ID)
ни один из вариантов для Query мне запустить не удалось.
...
Рейтинг: 0 / 0
30.01.2006, 16:55
    #33511480
ну я
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CREATE PROCEDURE
Мне тоже нужен такой вариант :-) и очень давно, но увы, полного соответствия между моделью Интербейз и Каше нет. Я дал ближайшее соответствие.
...
Рейтинг: 0 / 0
30.01.2006, 17:07
    #33511518
bn1978
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CREATE PROCEDURE
Мне кажется должен быть какой то выход.
...
Рейтинг: 0 / 0
31.01.2006, 17:22
    #33514013
bn1978
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CREATE PROCEDURE
Class User.Wisdom Extends %Persistent [ ClassType = persistent, SqlTableName = WISDOM, TimeChanged = "60296,29970.979684" ]
{

ClassMethod NewQuery1Close(ByRef qHandle As %Binary)
As %Status [ PlaceAfter = NewQuery1Execute ]
{
s qHandle="", ID = "" Quit $$$OK
}

ClassMethod NewQuery1Execute(ByRef qHandle As %Binary, RoutineName As
%CacheString, P0 As %CacheString, P1 As %CacheString, P2 As %CacheString,P3 As %CacheString) As
%Status
{
set ID = RoutineName,Temp = 0
// d @RoutineName
s qHandle=$lb("",$g(P0,"p0 undef"),$g(P1,"p1 undef"),$g(P2,"p2 undef"),$g(P3,"p3 undef")) ;
Quit $$$OK
}

ClassMethod NewQuery1Fetch(ByRef qHandle As %Binary, ByRef Row As %List, ByRef AtEnd As %Integer = 0)
As %Status [ PlaceAfter = NewQuery1Execute ]
{
new DID, OID, NAME , CCOUNT
if (qHandle'=$lb("")) {
s AtEnd=0

&sql(SELECT O.ID, O.PARENT, O.NAME, O.CCOUNT INTO :DID, :OID, :NAME , :CCOUNT FROM DETAIL O WHERE O.ID = :ID )
set ID = OID
s Row=$lb(DID,OID,NAME,CCOUNT)

if (ID < 1){ s qHandle=$lb("") }
}
else {
s AtEnd=1, Row=""
}
Quit $$$OK
}

Query NewQuery1(RoutineName As %CacheString )
As %Query(ROWSPEC = "DID:%CacheString,OID:%CacheString,NAME:%CacheString,CCOUNT:%CacheString")
[ SqlName = VisMQuery, SqlProc ]
{
}


Query1->SQL->Text = "CALL VisMQuery(123)";
Query1->Open();
На борланде выводит в решотку как положенно, через SQL Manager почему то не работает.
...
Рейтинг: 0 / 0
01.02.2006, 10:55
    #33515250
VadimF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CREATE PROCEDURE
SQL-менеджер (Кстати, пора уже переходить на Cache' 5.1. и, соответственно, на Портал Управления Cache') работает на через ODBC, а через Dynamic SQL.
В SQL-менеджере нельзя запускать хранимые процедуры (call sp).

В Cache' есть 2 типа хранимых процедур.
На основе class query и на основе classmethod.
1-ый тип - возвращает ResultSet.
2-ой - какие-то значения.


Мне кажется, Вашу хранимую процедуру легко реализовать с помощью classmethod.
Делаете classmethod, указываете, что это хранимая процедура.
В методе Вы можете использовать встроенный или динамический SQL, объекты, прямой доступ и т.д.

Что касается вызова хранимой процедуры в SQL-запросе, такая возможность есть.

Посмотрите документацию .


Вадим
...
Рейтинг: 0 / 0
03.02.2006, 09:23
    #33520863
bn1978
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CREATE PROCEDURE
Мне кажется, Вашу хранимую процедуру легко реализовать с помощью classmethod.

Мне поначалу так тоже показалось, но мне не удалось понять каким образом
возвращать значения, с одним все понятно, но как вернуть несколько значении


ClassMethod Cube(val As %Integer)
As %Query(ROWSPEC = "DID:%CacheString,OID:%CacheString,NAME:%CacheString,CCOUNT:%CacheString") [sqlproc]
{
???
}
...
Рейтинг: 0 / 0
03.02.2006, 10:48
    #33521148
VadimF
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CREATE PROCEDURE
Почему Вы возвращаете %Query.
Из classmethod Вы можете вернуть сколько угодно переменных, если передаете их в метод по ссылке, а не по значению.

Посмотрите пример:
Область Samples
Класс Sample.Person
Метод StoredProcTest.

ClassMethod StoredProcTest(name As %String, ByRef response As %String) As %Integer [ SqlName = Stored_Procedure_Test, SqlProc ]
{
// Set response to the concatenation of name.
Set response = name _ "||" _ name
QUIT 29
}

Вадим
...
Рейтинг: 0 / 0
03.02.2006, 12:50
    #33521743
bn1978
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CREATE PROCEDURE
Мне такой стиль не нравится. Да и тему начального вопроса это впринципе не затрагивает.
Моя задача, реляционное дерево http://rxlib.ru/WinLesson/bles3.htm, нуждается в процедуре, которая бы возвращала курсор, другими словами таблицу значений т.е %Query. Сначала пробовал вернуть его с помощью метода, но не нашол как это сделать. Получилось через Query.

Вы сказали что без проблем моглибы это сделать, при помощи метода класса
Если это правда , мне хотелось бы посмотреть, могу дать Вам класс дерева для Каше для которого все это нужно.
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / CREATE PROCEDURE / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]