2016-03-23 4 views
0

Я сделал вложенную таблицу, в которой храню имена и фамилии. Одно имя имеет две фамилии.операции вложенных таблиц

CREATE OR REPLACE TYPE list_surname AS TABLE OF VARCHAR2(10); 
/
CREATE TABLE person (name varchar2(10), 
surname list_surname) 
NESTED TABLE surname STORE AS list; 
/

INSERT INTO person VALUES('Olsen', list_surname('Arthur', 'Baxter')); 
INSERT INTO person VALUES('Jensen', list_surname('Barney', 'Louis')); 
INSERT INTO person VALUES('Andersen', list_surname('Chase', 'Mason')); 
/

Теперь я хочу сделать анонимный блок для подсчета и отображения, сколько людей имеют хотя бы одну фамилию, которая содержит букву «и», и если этот человек имеет букву «и» на его фамилию, то я хочу напечатайте этого человека (имя + фамилия). Это то, что я сделал до сих пор:

set serveroutput on 
DECLARE 
v_var VARCHAR2(32); 
v_nr NUMBER(30); 
cursor c1 (var VARCHAR2) is 
    select regexp_count(var,'[u]',1,'i') from dual; 
BEGIN 
    FOR i IN person.FIRST .. person.LAST LOOP 
     v_nr := 0; 
     open c1(person.list_surname); 
     loop 
     fetch c1 into v_nr; 
     exit when c1%notfound; 
     IF v_nr > 0 THEN 
      DBMS_OUTPUT.put_line(person); 
     end if; 
     end loop; 
     close c1; 
    end loop; 
END; 
/

Я не очень хорошо работает с вложенными таблицами, потому что это мой первый раз. Любые предложения приветствуются. Благодаря!

ответ

0

Попробуйте ниже:

set serveroutput on 

DECLARE 
    v_var VARCHAR2 (32); 
    v_nr NUMBER (30) := 0; 

    CURSOR c_name 
    IS 
     SELECT name FROM person; 

    CURSOR c_surname (p_name person.name%TYPE) 
    IS 
     SELECT VALUE (c) sn 
     FROM THE (SELECT surname 
        FROM person 
        WHERE name = p_name) c; 
BEGIN 
    FOR cur IN c_name 
    LOOP 
     FOR cs IN c_surname (cur.name) 
     LOOP 
     IF INSTR (cs.sn, 'u') > 0 
     THEN 
     v_nr := v_nr + 1; 
      DBMS_OUTPUT.put_line (
       cur.name || ' ' || cs.sn); 
     END IF; 
     END LOOP; 
    END LOOP; 
    dbms_output.put_line('Total Count: '||v_nr); 
END; 
/
Смежные вопросы