프로시져 실행 시점 문의 0 9 2,404

by cuteleem [2015.05.20 11:13:38]


 CREATE OR REPLACE PROCEDURE credb
   IS
    cursor1 INTEGER;
    credbsql VARCHAR2(100);
  
   BEGIN

    -- CREATE TABLE명령어 생성
    credbsql := 'CREATE TABLE ptest (no number)';
    
    --CREATE TABLE명령어 화면에 출력 
    DBMS_OUTPUT.PUT_LINE(credbsql);
    
    -- 테이블 생성
    cursor1 := DBMS_SQL.OPEN_CURSOR; 
    DBMS_SQL.PARSE(cursor1, credbsql, dbms_sql.v7);
    DBMS_SQL.CLOSE_CURSOR(cursor1);

    
    execute immediate credbsql;

    -- loop 74 만들기
    FOR i IN 1..75 LOOP
       INSERT INTO ptest (no) VALUES (i);
 
    END LOOP;
   
   END;
   /
   
   EXEC credb;

오라클클럽에서 프로시져 공부중입니다^^;

이대로 실행을 하면 테이블은 만들어지는데 데이타가 들어가지 않아요 ㅠㅠ

어떤 부분이 잘못 된건가요? 고수님들 알려주세용~~^^*

by DarkBee [2015.05.20 11:15:14]

commit;


by cuteleem [2015.05.20 15:22:54]

테이블 생성후랑 루프후에 commit; 넣었는데도 안되는데요 ;;;;;;;;


by 아발란체 [2015.05.20 15:35:12]

실행 시점?이라면, 프로시저를 콜해야 실행됩니다.

CALL [프로시저명] 또는 EXEC [프로시저명]


by 아발란체 [2015.05.21 16:56:17]

무성의한 답변 죄송합니다. ㅠㅠ 전혀 딴 얘기를 했습니다.


by cuteleem [2015.05.22 09:36:18]

ㅋㅋㅋ 괜찮습니다 ^^!!!!


by 손님 [2015.05.20 19:10:32]
ptest 테이블이 없다면 insert 구문에서 컴파일 에러날 것이고.
ptest 테이블이 있다면 excute 구문에서 실행 에러 나겠네요.

by 마농 [2015.05.22 09:46:11]

모바일에서 댓글 올리면

로그인 되어 있는데도 로그인 하라고 뜨고

손님으로 등록이 되네요.


by jkson [2015.05.21 08:37:07]

프로시저가 빌드 된 것으로 보아 ptest 테이블은 기존재했던 것 같구요. create table 문이 동적으로 실행되었기에 빌드 에러는 안 났겠죠.  execute immediate 문 실행시 테이블이 존재하고 있기 때문에 오류가 났을 테고 insert 문은 실행되지 않는 것으로 보이네요.


by cuteleem [2015.05.21 15:01:40]
CREATE OR REPLACE PROCEDURE credb
  IS
   
   credbsql VARCHAR2(100);
   insertsql VARCHAR2(100);
   
  BEGIN
 
   -- CREATE TABLE명령어 생성
   credbsql := 'CREATE TABLE ptest (no number)';   
   execute immediate credbsql;
 
   -- loop 75 만들기
   FOR i IN 1..75 LOOP  
    insertsql := 'INSERT INTO ptest (no) VALUES ('||i||')';
    execute immediate insertsql;
   END LOOP;
   
   
  END;
  /
   
  EXEC credb;

이렇게 하면 되네요^^;

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입