|
PROCEDURE 表作成
(
PM_TABLE IN VARCHAR2
)
AUTHID CURRENT_USER
/**********************************************************/
/* 変数の定義 */
/**********************************************************/
AS
WK_VALUE VARCHAR2(2000);
WK_NEXTVAL NUMBER;
TYPE EmpCurTyp IS REF CURSOR;
emp_cv EmpCurTyp;
W_A NUMBER;
W_B NUMBER;
sql_stmt VARCHAR2(200);
/**********************************************************/
/* 処理開始 */
/**********************************************************/
BEGIN
DBMS_OUTPUT.PUT_LINE('表作成');
DBMS_OUTPUT.PUT_LINE(PM_TABLE);
/***********************************************/
/* シーケンスより値を取得 */
/***********************************************/
select AUTO_INCREMENT.NEXTVAL into WK_NEXTVAL from dual;
/***********************************************/
/* その値を使用して CREATE 文を作成 */
/***********************************************/
WK_VALUE := 'CREATE TABLE "' || PM_TABLE || WK_NEXTVAL || '" (' ||
' id NUMBER ' ||
' , value NUMBER ' ||
')';
/***********************************************/
/* CREATE 文を実行 */
/***********************************************/
EXECUTE IMMEDIATE WK_VALUE;
/***********************************************/
/* INSERT 文を作成 */
/***********************************************/
WK_VALUE := 'insert into "' || PM_TABLE || WK_NEXTVAL || '" values(' ||
' 1 ' ||
' , 1000 ' ||
')';
/***********************************************/
/* INSERT 文を実行 */
/***********************************************/
EXECUTE IMMEDIATE WK_VALUE;
DBMS_OUTPUT.PUT_LINE(WK_VALUE);
/***********************************************/
/* 動的カーソルの為の SELECT 文を作成 */
/***********************************************/
sql_stmt := 'SELECT * FROM "' || PM_TABLE || WK_NEXTVAL || '"';
/***********************************************/
/* 動的カーソルの処理 */
/***********************************************/
OPEN emp_cv FOR sql_stmt;
LOOP
FETCH emp_cv INTO W_A,W_B;
EXIT WHEN emp_cv%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(W_A||'|'||W_B);
END LOOP;
CLOSE emp_cv;
/***********************************************/
/* 表を削除するので COMMIT で更新確定 */
/***********************************************/
COMMIT;
/***********************************************/
/* 表を削除 */
/***********************************************/
WK_VALUE := 'DROP TABLE "' || PM_TABLE || WK_NEXTVAL || '"';
EXECUTE IMMEDIATE WK_VALUE;
/**********************************************************/
/* 一番外側のブロックの例外処理 */
/**********************************************************/
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('例外発生:'||SQLCODE||':'||SQLERRM);
END;
| |