Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.06.2011, 21:43   #1
Alex_Axel
 
Регистрация: 22.05.2010
Сообщений: 5
По умолчанию SQL/Pl - вывод таблицы через функцию

Здравствуйте, у меня маленький вопрос, а точнее мне нужна команда, которая через функцию выводит данные таблицы. а т.е. вот у меня есть код функции и прилежащих к ней таблицы и последовательности:
Код:
CREATE SEQUENCE www
START WITH 1
INCREMENT BY 1;

CREATE TABLE iii(
id NUMBER,
product VARCHAR2(15),
price NUMBER);
insert into iii values (www.nextval, '1', 2000);
insert into iii values (www.nextval, '4s', 1000);
insert into iii values (www.nextval, '3', 5000);
insert into iii values (www.nextval, 'qwe', 2500);

create or replace function GET_ITEM(product_new in varchar2) return number is
v_id iii.id%TYPE;
v_product iii.product%TYPE;
BEGIN
SELECT id, product INTO v_id, v_product FROM iii WHERE product=product_new;
return v_id;
EXCEPTION
WHEN NO_DATA_FOUND THEN
INSERT INTO iii (id, product, price) VALUES (www.NEXTVAL, product_new, 2000);
return v_id;
END GET_ITEM;
/

SET SERVEROUTPUT ON;
BEGIN
DBMS_OUTPUT.put_line(GET_ITEM('4s'));
END;
/
функция рабочая, всё работает, вдумываться что она делает необязательно, но если интересно, то она добавляет запись в таблицу если такой записи, как в параметре при выводе функции, нет.

Мне же нужно чтобы сразу же выводились данные таблицы iii. Как мне сказал человек давший это задание, здесь нужна всего одна строка. Конечно можно после этого кода написать:

select * from iii;

и таблица выведется. (выводиться всё верно, но суть задачи как уже понятно не в этом)
Но нужно чтобы был тот же результат без этой строки. Другими словами, что то нужно написать то ли в тело функции, то ли в последней части кода:
Код:
"SET SERVEROUTPUT ON;
BEGIN
DBMS_OUTPUT.put_line(GET_ITEM('4s'));
END;"
Подскажите как быть, а то самую основную часть (саму функцию) я написал, а вот с этой деталью разобраться никак не могу. Спасибо!

Последний раз редактировалось Stilet; 30.06.2011 в 08:12.
Alex_Axel вне форума Ответить с цитированием
Старый 30.06.2011, 08:20   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Как мне сказал человек давший это задание, здесь нужна всего одна строка.
Сразу видно что Оракл он не знает. В разных версиях его по разному делается.
Например в 8-ке можно пробовать так:

1) Создаем типы:
Код:
CREATE TYPE TItem AS OBJECT(
 Имя VARCHAR(20),
 Класс VARCHAR(20),
 Оценка int
)
/
CREATE TYPE  TFIOS
  AS TABLE OF TItem 
/
2) Описываем функцию, работающую с типом таблицы:
Код:
FUNCTION ВсеЛюди(Класс VARCHAR2) RETURN TFIOS IS
res TFIOS:=TFIOS();
BEGIN
  SELECT cast(multiset(
	   SELECT  FIO,class,Ozenka
     	       FROM Narod
                where class=Класс
		ORDER BY 1
  ) AS TFIOS) INTO res FROM dual;
 RETURN res;
END ВсеЛюди;
И вызывать ее можно так:
Код:
SELECT * FROM TABLE(cast(ВсеЛюди('1-а') AS TFIOS))
В версиях Оракла поновее есть другие методики.
I'm learning to live...

Последний раз редактировалось Stilet; 30.06.2011 в 08:23.
Stilet вне форума Ответить с цитированием
Старый 30.06.2011, 09:02   #3
Alex_Axel
 
Регистрация: 22.05.2010
Сообщений: 5
По умолчанию

Эмм... дело то не в этом, код написан синтаксический правильно! функция написана правильно, всё правильно! Вы практически весь код переписали в другом формате, этот формат не то что мне нужно, мне вообще код этот изменять не надо он верен, он зачтен. Это SQL PLUS! Мне надо только чтобы данные таблицы выводились.

P.S. Этот человек мой преподаватель и поверьте он знает о чём говорит, это его предмет, как преподавателя университета! Оракл мне не нужен такой как у вас, это другой язык!

Последний раз редактировалось Alex_Axel; 30.06.2011 в 09:10.
Alex_Axel вне форума Ответить с цитированием
Старый 30.06.2011, 19:19   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
и поверьте он знает о чём говорит
Не обижайся, не поверю.
Цитата:
Оракл мне не нужен такой как у вас, это другой язык!
Чтож. Если ты так утверждаешь, значит придется поверить
Но у меня одна ма-а-аленькая просьба: Когда решишь эту задачу - будьласка, выложи правильный ответ сюда. Я долго работал с PL-SQL и мне оч. интересно как решить такую задачу в рамках установленных тобой.

P.S. Я серьезно, никаких насмешек...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.07.2011, 16:45   #5
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

вопрос к ТС
а па-рюсськи можно было написать что конкретно нужно вывести?
всю таблицу или только айдишник получить?

потому что я подозреваю, что ваш препод рассчитывал получить ответ типа "не будем морочиться с проверками, а заюзаем оператор MERGE"
soleil@mmc вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Реализация через функцию c++\noob Общие вопросы C/C++ 0 08.03.2011 12:29
Удаление данных из таблицы через SQL запрос Kity19 БД в Delphi 2 19.01.2011 23:35
Подчеркнуть текст через функцию Lepricon69 Общие вопросы Delphi 3 24.06.2010 01:59
Создание новых таблиц в MS SQL SERVERE через SQL запрос в Delphi S_Yevgeniy Помощь студентам 1 27.10.2009 06:26