2013-11-27 3 views
0

В настоящее время у меня есть эти таблицы, моя главная цель - автоматически заполнить столбец event_item_exhibited, объединив категорию и item_number из TABLE "ITEMS". Я попытался с помощью функции LISTAGG после долгих исследований, но я получаю ошибку в строке 2: ORA-00909: неверное число аргументовФункция LISTAGG в SQLPLUS на ORACLE 11g error

CREATE TABLE ITEMOWNERS (itemOwner_number INT NOT NULL CHECK(itemOwner_number >= 1000 AND itemOwner_number <= 2999), 
      itemOwner_name VARCHAR(30) NOT NULL,       
      itemOwner_address VARCHAR(100) NOT NULL, 
      first_contact TIMESTAMP NOT NULL,               
      PRIMARY KEY (itemOwner_number)); 



CREATE TABLE ITEMS (lent_by_itemOwner_number INT NOT NULL, 
        category CHAR (3) NOT NULL CONSTRAINT chk_category_input CHECK (category IN ('LDN','STH', 'MNC','SCT')),  
        item_number NCHAR(3) NOT NULL UNIQUE, 
        item_name VARCHAR(30) NOT NULL UNIQUE,    
        item_value NUMBER NOT NULL ,  
        item_description VARCHAR(1000) NOT NULL,    
        FOREIGN KEY (lent_by_itemOwner_number) REFERENCES ITEMOWNERS(itemOwner_number)); 

CREATE TABLE EVENTS (event_number INT NOT NULL CHECK(event_number >= 3000 AND event_number <= 3999), 
       event_item_exhibited VARCHAR(6) ,          
       title VARCHAR(100) NOT NULL UNIQUE,        
       event_description VARCHAR(1000) NOT NULL,     
       PRIMARY KEY (event_number)); 

Функции Я создал следующий;

SELECT event_number, 
    LISTAGG(category, '/',item_number,',') WITHIN GROUP (ORDER BY category AND item_number) AS event_item_exhibited 
FROM (
    SELECT UNIQUE 
      event_number, 
    FROM EVENTS 
    ) 
GROUP BY event_number; 

Я приложил пример моей цели на выходе. http://oi44.tinypic.com/2ur2dn4.jpg

Вот что я сделал после вашей рекомендации;

CREATE TABLE ITEMOWNERS (itemOwner_number INT NOT NULL CHECK(itemOwner_number >= 1000 AND itemOwner_number <= 2999), 
      itemOwner_name VARCHAR(30) NOT NULL,       
      itemOwner_address VARCHAR(100) NOT NULL, 
      first_contact TIMESTAMP NOT NULL,               
      PRIMARY KEY (itemOwner_number)); 



CREATE TABLE ITEMS (lent_by_itemOwner_number INT NOT NULL, 
        category CHAR (3) NOT NULL CONSTRAINT chk_category_input CHECK (category IN ('LDN','STH', 'MNC','SCT')),  
        item_number NCHAR(3) NOT NULL UNIQUE, 
        item_name VARCHAR(30) NOT NULL UNIQUE,    
        item_value NUMBER NOT NULL ,  
        item_description VARCHAR(1000) NOT NULL,    
        FOREIGN KEY (lent_by_itemOwner_number) REFERENCES ITEMOWNERS(itemOwner_number)); 

CREATE TABLE EVENTS (event_number INT NOT NULL CHECK(event_number >= 3000 AND event_number <= 3999), 
       event_item_exhibited VARCHAR(7) ,          
       title VARCHAR(100) NOT NULL UNIQUE,        
       event_description VARCHAR(1000) NOT NULL,     
       PRIMARY KEY (event_number)); 


INSERT INTO ITEMOWNERS VALUES ('1001','Edward','London',CURRENT_TIMESTAMP); 
INSERT INTO ITEMOWNERS VALUES ('1002','Michael','Nottingham',CURRENT_TIMESTAMP); 



INSERT into ITEMS VALUES ('1001','LDN','121','Penmate','500','Unique pen'); 
INSERT into ITEMS VALUES ('1002','MNC','131','Trampoline','1500','Professional equipment'); 


INSERT INTO EVENTS VALUES ('3001','LDN/121','PEN SHOW', 'Exclusive show of unique pens'); 
INSERT INTO EVENTS VALUES ('3002','MNC/131','Jump Club', 'Enjoy a session of tampolining'); 

Конечный требуемый выход - это. http://oi39.tinypic.com/35a80on.jpg

ITEMOWNER_NUMBER ITEMOWNER_NAME  ITEMOWNER_ADDRESS FIRST_CONTACT            
     1001  Edward    London    27-NOV-13 15.14.43.899677                   
     1002  Michael   Nottingham   27-NOV-13 15.14.43.930465                   



LENT_BY_ITEMOWNER_NUMBER CATEGORY ITEM_NUMBER ITEM_NAME ITEM_VALUE ITEM_DESCRIPTION 

1001      LDN  121   Penmate 500  Unique pen 
1002      MNC  131   Trampoline 1500  Professional equipment 



    EVENT_NUMBER EVENT_ITEM TITLE  EVENT_DESCRIPTION                        

      3001 LDN/121  PEN SHOW Exclusive show of unique pens                       
      3002 MNC/131  Jump Club Enjoy a session of tampolining                      

Теперь весь мой весь вопрос основан исключительно на том, как я могу получить базу данных заполнить EVENT_ITEM на это сам путем слияния КАТ & ITEM_NUMBER из элементов таблицы в coloumn EVENT_ITEM, как показано выше.

+0

Followup на мой оригинальный комментарий - я только что имел возможность Круга назад на это, и посмотреть, что вы получили гораздо большие проблемы, чем здесь некоторые простые синтаксические ошибки. Я думаю, что ваш первый шаг в правильном направлении более четко выражает вашу проблему, поскольку (1) записывает сценарии создания таблиц, которые фактически работают (в Oracle, а не SQL Server), (2) записывать вставные операторы, которые загружают значимые данные, и затем (3) представляет желаемый набор результатов, соответствующий вашим данным, с четким объяснением того, как вы достигли желаемого результата. – KevinKirkpatrick

+0

Я обновил его, нет никакой проблемы при вводе вручную, однако я хотел посмотреть, как я могу сделать это автоматическим процессом. – CodeStack

+0

Извините, я должен был быть более ясным - я имел в виду, что помимо того, что INSERTS загружал значимую выборку данных, покажите нам ожидаемые результаты, которые вы хотите увидеть для этих данных (наряду с четким объяснением того, как эти результаты должны быть получены). Это обеспечит, чтобы у респондентов было четкое представление о том, что вы пытаетесь автоматизировать ... – KevinKirkpatrick

ответ

2
LISTAGG(category, '/',item_number,',') 
    WITHIN GROUP (ORDER BY category AND item_number) AS event_item_exhibited 

синтаксических ошибок Пара там, должно быть

LISTAGG(category || '/' || item_number,',') 
    WITHIN GROUP (ORDER BY category , item_number) AS event_item_exhibited 
+0

Спасибо, казалось, помогли преодолеть текущую ошибку, однако теперь я столкнулся с другой проблемой. «ОШИБКА в строке 2: ORA-00904:« ITEM_NUMBER »: недопустимый идентификатор« это потому, что он находится в другой таблице? Разумеется, категория должна была дать ту же ошибку, что и тогда – CodeStack

Смежные вопросы