Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.11.20;
Скачать: [xml.tar.bz2];

Вниз

TSQLStoredProc и схема   Найти похожие ветки 

 
Andrushk   (2005-10-06 11:38) [0]

Есть БД Oracle, в ней процедура AA_TEST.
Использую TSQLStoredProc из dbExpress.
Процедура AA_TEST находится в схеме скажем TEST.
Когда к базе коннектишься под TEST - процедура работает, но стоит законектится под другим пользователем, скажем TEST1 - возникает ошибка.

Пробема не в оракловых правах, TEST1 имеет права на исполнение любой процедуры из TEST. Проблема в SQL который  генерит Delphi.

Перед выполнением процедуры, он выполняет select:
SELECT ....
FROM SYS.ALL_ARGUMENTS A
WHERE (A.DATA_LEVEL = 0) AND (A.DATA_TYPE IS NOT NULL) AND (A.OBJECT_NAME = "AA_TEST" AND (A.PACKAGE_NAME IS NULL OR A.PACKAGE_NAME = A.OBJECT_NAME)) AND  (A.OWNER = "TEST1") ORDER BY A.POSITION

Проблема в (A.OWNER = "TEST1"), Delphi ставит владельцем процедуры схему,под которой законнектился.

Если сделать TSQLStoredProc.SchemaName="TEST", то владелец будет ставиться правильный, но такое решение не нравится (ну например я вообще не хочу к схеме привязываться, есть public-синоним и все).

Хочется заставить DELPHI не включать OWNER в запрос.
Никто такой проблемой не занимался?


 
Reindeer Moss Eater ©   (2005-10-06 11:47) [1]

А укажи полное имя процедуры test.aa_test


 
evvcom ©   (2005-10-06 12:09) [2]


> Проблема в SQL который  генерит Delphi

Delphi не генерит никакого SQL. Это заблуждение. Кто ж его генерит? dbExpress? А нафига? dbExpress не юзал, но в ОДАКе просто ставлю StoredProcName := "AA_TEST", в Оракле создаю синоним AA_TEST для объекта TEST.AA_TEST и никаких проблем. И есть еще одно решение...


 
Andrushk   (2005-10-06 12:56) [3]

2 Reindeer Moss Eater ©
Нет, задача к схеме вообще не привязываться.

2 evvcom ©  
Думаю да dbExpress.
Смысл запроса, как я понимаю, получить информацию о параметрах процедуры, я в вопросе подрезал селект, чтобы покороче было, вот недостающая часть:
SELECT 0, "", A.OWNER, A.OBJECT_NAME, A.ARGUMENT_NAME, 0, A.IN_OUT,
      A.DATA_TYPE, 0, A.DATA_TYPE, A.DATA_LENGTH, A.DATA_PRECISION, A.DATA_SCALE, 1,
   A.TYPE_NAME, A.POSITION

А по поводу псевдонима...всеравно ведь не прокатит, OWNER то ставиться не тот...


 
Seg   (2005-10-06 13:03) [4]

Чтобы не генерить этот запрос при каждом обращении процедуры, лучше использовать StoredProc и задать параметры. Тогда все равно, кем ты вошел.

Есть еще одни вариант: самому перед выполненнием процедуры явно выполнить этот запрос, присвоить параметры, присвоить параметрам значания и запустить процедуру.


 
Andrushk   (2005-10-06 13:12) [5]

2 Seg   (06.10.05 13:03) [4]
А вот как сделать чтобы запрос не генерился? Мне вот как раз и интересно как у TSQLStoredProc можно управлять тем, как он получает информацию о параметрах.
АTStoredProc - это же для BDE.


 
Seg   (2005-10-06 13:22) [6]

у TSQLStoredProc  есть свойство - SchemaName, попробуй туда прописать имя схемы.


 
Andrushk   (2005-10-06 14:46) [7]

Seg   (06.10.05 13:22) [6]
А я еще в вопросе написал что тогда OWNER правильно подставляется, ну точнее что в SchemaName напишешь то он в OWNER и прописывает.
Но задача в том, чтобы в программе имя схемы вообще не фигурировало.
Чтобы я выполнил ALTER SESSION SET current_schema=... и все.
Для TSQLDataSet этот номер прокатывает. Все работает.
А для TSQLStoredProc номер не проходит из-за этого дурацкого запроса списка параметров...
Мы кстати проверяли, на разных машинах он поразному генерится, ну т.е. у меня вот добавляется OWNER, а у кого-то не добавляется. Есть предположение что это от установленных обновлений зависит...причем именно когда все обновления стоят этот OWNER и добавляется (но это предположение)...


 
ANB ©   (2005-10-06 15:04) [8]


> Andrushk   (06.10.05 14:46) [7]

ИМХО. У а нас наоборот от синонимов избавились и везде указывают схему. Иначе как ты поставишь на один экземпляр 2 копии одной программы ?


 
evvcom ©   (2005-10-06 15:12) [9]


> Иначе как ты поставишь на один экземпляр 2 копии одной программы?

А как ты в этом случае делаешь с указанием схемы? Или вычислив ее везде подставляешь в StoredProcName?
Я сейчас создал табличку с вариантами схем, на нее повесил ХП с синонимом. После выбора схемы выполняю ALTER SESSION SET current_schema=..., а на клиенте все имена ХП без имен схем.


 
Andrushk   (2005-10-06 16:44) [10]

evvcom ©   (06.10.05 15:12) [9]

Вечер, не могу никак сообразить что такое "ХП" :-)


 
Seg   (2005-10-06 16:46) [11]

Может через TSQLDataSet вызывать процедуру?


 
Andrushk   (2005-10-06 17:48) [12]

Seg   (06.10.05 16:46) [11]

Тоже думал об этом...но вроде как-то криво выходит:-)
И переделывать уже сделанное надо...


 
Seg   (2005-10-06 17:57) [13]

А что здесь кривого?


 
Andrushk   (2005-10-06 18:14) [14]

Seg   (06.10.05 17:57) [13]

Как вызвать процедуру из TSQLDataSet? Я чего-то сходу не догнал.
Вот есть такая процедура:

CREATE OR REPLACE PROCEDURE AA_Test(v_ret OUT NUMBER) AS
BEGIN
 SELECT 1 INTO v_ret FROM dual;
END;

Попробовал в TSQLDataSet просто ее имя написать с параметром - ошибка, анонимный блок - тоже ошибка...
Ну в данном случае процедуру можно функцией сделать и в селекте вызвать...а если он несколько параметров возвращает...
Короче я не знаю как из TSQLDataSet процедуру выполнить...



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2005.11.20;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.044 c
3-1128938761
Monk
2005-10-10 14:06
2005.11.20
Полоса прокрутки DBLookupCombo/ListBox


14-1130518782
Ксардас
2005-10-28 20:59
2005.11.20
Какова роль общества в политике?


11-1111908939
Serr
2005-03-27 11:35
2005.11.20
Вопрос по базам


14-1130343340
Gydvin
2005-10-26 20:15
2005.11.20
Совместимость Wi-Fi and Bluetooth


14-1130473666
PZ
2005-10-28 08:27
2005.11.20
Билл Гейтс - с днем рождения





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский