'Put result of cursor into table

How i can put result rows of this cursor, into column ?

CURSOR CUR1 IS SELECT FILMS.FILM_CODE  from FILMS where FILMS.ID_FILM = ID_FILM_ FOR UPDATE OF FILM_CODE;

I wanna put this rows into FILM_CODE column of table below

CREATE TABLE SESSIONF(
ID_SESSION INTEGER DEFAULT SESSION_ID_SEQ.NEXTVAL NOT NULL,
FILM_CODE INTEGER NOT NULL,
NAMEOFGENRE VARCHAR2(200) NOT NULL,
HALL_CODE INTEGER NOT NULL,
NUMBEROFFREEPLACES INTEGER NOT NULL,
COST INTEGER NOT NULL,
DATA_OF_SESSION DATE,
CONSTRAINT  PK_ID_SESSION PRIMARY KEY (ID_SESSION)
)
TABLESPACE TBS_PERM_KINO;

Sorry if topic with the same issue already exist, couldn't find it.

EDIT Procedure on update

create or replace procedure UpdateFILM(ID_FILM_ FILMS.ID_FILM%TYPE,FILM_CODE_ IN FILMS.FILM_CODE%TYPE,FILM_ IN FILMS.FILM%TYPE,GENRE_CODE_ FILMS.GENRE_CODE%TYPE,DIR_CODE_ FILMS.DIRECTOR_CODE%TYPE,YEAROFRELEAS_ FILMS.YEAROFRELEAS%TYPE)
is
    varible int := 0;
    varible2 int := 0;
    varible3 int := 0;
    varible4 int := 0;
    CURSOR CUR1 IS SELECT FILMS.FILM_CODE  from FILMS where FILMS.ID_FILM = ID_FILM_ FOR UPDATE OF FILM_CODE;
    F_CODE SESSIONF.FILM_CODE%TYPE; 
begin
    select count(*) INTO VARIBLE from FILMS where FILM_CODE_ = FILMS.FILM_CODE;
    select count(*) INTO VARIBLE2 from DIRECTORS where DIR_CODE_ = DIRECTORS.DIRECTOR_CODE;
    IF varible != 0
        THEN DBMS_OUTPUT.put_line('FILM_CODE_ erro : there is ALREADY THE SAME FILM_CODE');
    ELSIF varible2 =0
        THEN DBMS_OUTPUT.put_line('DIR_CODE_ ERR : there IS NO SUCH DIRECTOR_CODE');
    ELSIF varible3 !=0
        THEN DBMS_OUTPUT.put_line('GENRE_CODE_ ERR : there IS NO SUCH GENRE_CODE_');
    ELSIF TO_DATE('12/12/1941', 'DD/MM/YYYY') >  YEAROFRELEAS_
        THEN DBMS_OUTPUT.put_line('YEAROFRELEAS_ erro : DATE IS LESS THEN 1941');
    ELSIF TO_DATE('12/12/3000', 'DD/MM/YYYY') <  YEAROFRELEAS_
        THEN DBMS_OUTPUT.put_line('YEAROFRELEAS_ erro : DATE IS TO HIGH(MORE THEN 3000)');    
        ELSE     
        UPDATE FILMS SET
            FILMS.ID_FILM = ID_FILM_,
                FILMS.FILM_CODE = FILM_CODE_,
                    FILMS.FILM = FILM_,
                        FILMS.GENRE_CODE = GENRE_CODE_,
                          FILMS.DIRECTOR_CODE = DIR_CODE_,
                            FILMS.YEAROFRELEAS = YEAROFRELEAS_
                    WHERE   FILMS.ID_FILM = ID_FILM_;
        OPEN CUR1;
            LOOP
                FETCH CUR1 INTO F_CODE;
                    UPDATE SESSIONF SET SESSIONF.FILM_CODE=FILM_CODE_ WHERE F_CODE = SESSIONF.FILM_CODE;
                DBMS_OUTPUT.put_line(F_CODE);
              EXIT WHEN CUR1%NOTFOUND;
            END LOOP;
        CLOSE CUR1;               
        DBMS_OUTPUT.put_line('films update successful');
    END IF;
    exception
    when others 
    then DBMS_OUTPUT.put_line(sqlerrm);
end;
CREATE sequence FILM_ID_SEQ;
CREATE TABLE FILMS (
ID_FILM INTEGER DEFAULT FILM_ID_SEQ.NEXTVAL NOT NULL,
FILM_CODE INTEGER NOT NULL,
FILM VARCHAR2(200) NOT NULL UNIQUE,
GENRE_CODE INTEGER NOT NULL,
DIRECTOR_CODE INTEGER NOT NULL,
YEAROFRELEAS DATE,
CONSTRAINT  PK_ID_FILM PRIMARY KEY (ID_FILM)
)
TABLESPACE TBS_PERM_KINO;
alter table SESSIONF add constraint FK_FILM_CODE_REF_ID_FILM foreign key (FILM_CODE) references FILMS (ID_FILM) ON DELETE CASCADE;



Solution 1:[1]

The way you put it, you can't do that.

Why? Because table contains numerous NOT NULL columns, while cursor selects only one column: FILM_CODE. You could store that value, but what will you put into other mandatory columns?

Therefore, you'll have to either fix cursor's select statement so that it fetches additional columns, or modify table and remove not null constraints (or, possibly, set default values for those columns).


On the other hand, why would you use a cursor? Cursor is usually slow (as you'll probably use it in a loop which works row-by-row). Consider

insert into sessionf (filmcode, nameofgenre, ...)
select f.filmcode, ...
from films f 
     join ... on ...

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Littlefoot