Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Имена таблиц в качестве параметров хранимых процедур

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Базы данных
Предыдущая тема :: Следующая тема  
Автор Сообщение
deimos



Зарегистрирован: 15.11.2001
Сообщения: 61
Откуда: Харьков

СообщениеДобавлено: Пт Дек 14 2001 10:26    Заголовок сообщения: Имена таблиц в качестве параметров хранимых процедур Ответить с цитатой

Очень нужно написать хранимую процедуру, в которой будет производиться выборка из каких-либо таблиц одинаковой структуры, но вот из какой именно я хочу задать через входной параметр.
Можно ли такое вообще реализовать???
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
krakozyabl



Зарегистрирован: 18.03.2002
Сообщения: 138
Откуда: Москва

СообщениеДобавлено: Пт Дек 14 2001 10:53    Заголовок сообщения: Re: Имена таблиц в качестве параметров хранимых процедур Ответить с цитатой

Все зависит от твоей базы данных.
На MS SQL это сделать можно. Сие называется динамическим запросом к базе данных, который формируется внутри хранимой процедуры.
Передаешь туда имя таблицы, далее генеришь строку запроса, а потом командой exec выполняешь его.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
deimos



Зарегистрирован: 15.11.2001
Сообщения: 61
Откуда: Харьков

СообщениеДобавлено: Пт Дек 14 2001 12:26    Заголовок сообщения: Re: Имена таблиц в качестве параметров хранимых процедур Ответить с цитатой

а в oracle?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Интересующийся
Гость





СообщениеДобавлено: Пт Дек 14 2001 12:52    Заголовок сообщения: Re: Имена таблиц в качестве параметров хранимых процедур Ответить с цитатой

вооще-то способов навалом:
dbms_sql, execute
immediate да и просто DSQL что-то похожее:

L varchar(2000);
TYPE CURTYPE IS REF CURSOR;
C CURTYPE;
R C%ROWTYPE; -- record
................
L:='select || col1_name ||','|| col2_name ||' from '|| table_name ... ;

open C for L;
loop
fetch C into R;
exit when C%notfound;
if R.COL1_NAME='Y' then
....
end if;
exit when C%notfound;
end loop;
close C;

exception
.....
Вернуться к началу
deimos



Зарегистрирован: 15.11.2001
Сообщения: 61
Откуда: Харьков

СообщениеДобавлено: Пт Дек 14 2001 15:22    Заголовок сообщения: Re: Имена таблиц в качестве параметров хранимых процедур Ответить с цитатой

Слушай, если ты хорошо знаешь как это делать, помоги мне, а то я что-то не смог использовать то, что ты посоветовал.

Допустим мне нужно написать хранимую процедуру которая получает кол-во строк в таблице, имя которой задается через входной параметр.
Напиши мне такую , плс.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Интересующийся
Гость





СообщениеДобавлено: Пт Дек 14 2001 20:59    Заголовок сообщения: Имей совесть. Читай доку или примеры. Ответить с цитатой

.
Вернуться к началу
deimos



Зарегистрирован: 15.11.2001
Сообщения: 61
Откуда: Харьков

СообщениеДобавлено: Пн Дек 17 2001 18:03    Заголовок сообщения: Re: А у тебя самого есть совесть??? Ответить с цитатой

Послушай, форумы и существуют для того, чтобы помогать, а не читать нотации!
Если ты знаешь, то почему бы не сказать?
На доку все умеют ссылаться.
Если бы у меня не было проблем я бы и не писал здесь!
НИ ОДИН ИЗ твойх способов мне не удалось применить. Не работает.
Сам подумай:
open C for L;
будет принимать L как строку 'L' а не как переменную, содержащую запрос.
А остальные, предложенные тобой, способы работают толшько в Pro*C.

Что-то здесь не клеится...
Толи ты не знаешь, то ли я совсем не понимаю...
Ты сам попробуй...!!!
И если у тебя все получиться не поленись привести код. Буду ОЧЕНЬ благодарен!!!!!
(напоминаю - у меня ORACLE)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Интересующийся
Гость





СообщениеДобавлено: Вт Дек 18 2001 13:45    Заголовок сообщения: Есть. Ответить с цитатой

Я специально с использованием рефкурсоров
сделал, что бы показать, что это работает.

CREATE OR REPLACE PACKAGE my_test AUTHID CURRENT_USER IS
PROCEDURE get_number_of_rows( table_name IN VARCHAR2, number_of_rows OUT NUMBER)
;
END my_test;
/
CREATE OR REPLACE PACKAGE BODY my_test
IS
PROCEDURE get_number_of_rows( table_name IN VARCHAR2, number_of_rows OUT NUMBER)
IS
TYPE CurTyp IS REF CURSOR;
C CurTyp;
L VARCHAR2(200);
BEGIN
L:='select count(*) from ' || table_name ;
open C for L;
fetch C into number_of_rows;
close C;
EXCEPTION
when others then
close C;
RAISE;
END get_number_of_rows;
END my_test;
/
set serveroutput on
DECLARE
t_name VARCHAR2(32);
n_rows NUMBER;
BEGIN
t_name := 'EMP';
my_test.get_number_of_rows(t_name, n_rows);
dbms_output.put_line('number_of_rows = '||TO_CHAR(n_rows));
end;
/



Package created.

Package body created.

number_of_rows = 14

PL/SQL procedure successfully completed.

SQL
Вернуться к началу
deimos



Зарегистрирован: 15.11.2001
Сообщения: 61
Откуда: Харьков

СообщениеДобавлено: Вт Дек 18 2001 14:10    Заголовок сообщения: Re: ДА, Действительно Есть. Ответить с цитатой

Спасибо, дружищще!
Ты мне действительно помог.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
она
Гость





СообщениеДобавлено: Чт Авг 07 2003 16:31    Заголовок сообщения: Re: Имена таблиц в качестве параметров хранимых процедур Ответить с цитатой

а в psql?? можно ли в Pgsql в _функциях_ использовать селекты с _переменным_ значением таблицы.
убилась уже :о(
//--------
CREATE FUNCTION count_thread(int4, text) RETURNS int4 AS
'
DECLARE
id_thread ALIAS FOR $1;
table_thread ALIAS FOR $2;
cntt int4;
BEGIN
cntt:=(select count(*) as cnt from table_thread where thread=id_thread);
RETURN cntt;
END;
'LANGUAGE 'plpgsql';
//-----------
если вместо table_thread поставить реальное имя - пашет. а с переменной матерится.
хелпми!!!!!!
Вернуться к началу
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Базы данных Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...