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;
오라클클럽에서 프로시져 공부중입니다^^;
이대로 실행을 하면 테이블은 만들어지는데 데이타가 들어가지 않아요 ㅠㅠ
어떤 부분이 잘못 된건가요? 고수님들 알려주세용~~^^*
commit;
테이블 생성후랑 루프후에 commit; 넣었는데도 안되는데요 ;;;;;;;;
실행 시점?이라면, 프로시저를 콜해야 실행됩니다.
CALL [프로시저명] 또는 EXEC [프로시저명]
무성의한 답변 죄송합니다. ㅠㅠ 전혀 딴 얘기를 했습니다.
ㅋㅋㅋ 괜찮습니다 ^^!!!!
모바일에서 댓글 올리면
로그인 되어 있는데도 로그인 하라고 뜨고
손님으로 등록이 되네요.
프로시저가 빌드 된 것으로 보아 ptest 테이블은 기존재했던 것 같구요. create table 문이 동적으로 실행되었기에 빌드 에러는 안 났겠죠. execute immediate 문 실행시 테이블이 존재하고 있기 때문에 오류가 났을 테고 insert 문은 실행되지 않는 것으로 보이네요.
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;
이렇게 하면 되네요^^;