Oracle存储过程笔记1:动态SQL(建表)

 

 

 

CREATE OR REPLACE PROCEDURE P_CONSTRUCT_DATA AUTHID CURRENT_USER AS

 

/*---------------------------------------------------------------------------+

 

 |程序目的:动态建表,随机生成测试数据

 

 |创建日期:2010-11-23

 

 |备注:oracle给我们提供了在存储过程中使用role权限的方法:

 

           修改存储过程,加入Authid Current_User时存储过程可以使用role权限

 

 +--------------------------------------------------------------------------*/

 

--DECLARE

 

  V_LOOP1 INT;

 

  V_LOOP2 INT;

 

  V_NUM NUMBER;

 

  V_TNUM NUMBER;

 

  V_STARTIME NUMBER;

 

  V_SQL_MEG VARCHAR(4000);

 

  BEGIN

 

    SELECT MAX(PROD_ID) INTO V_NUM FROM SCOTT.T_PRODUCT_BASE ;

 

    SELECT TO_CHAR(TO_DATE('2010-10-1','YYYY-MM-DD'),'J')INTO V_STARTIME FROM DUAL;

 

    FOR V_LOOP1 IN 1..V_NUM LOOP

 

            SELECT COUNT(1) INTO V_TNUM FROM USER_TABLES WHERE TABLE_NAME='T_PROD_SALE'||V_LOOP1||'';

 

            IF V_TNUM>0 THEN 

 

                EXECUTE IMMEDIATE 'DROP TABLE T_PROD_SALE'||V_LOOP1||'';

 

            END IF;

 

            EXECUTE IMMEDIATE 'CREATE TABLE T_PROD_SALE'||V_LOOP1||'

 

                              (PROD_CNNAME VARCHAR2(50),CUSTOMER_ID NUMBER,SDATE DATE,QUANTITY NUMBER,FEES NUMBER)';

 

            FOR V_LOOP2 IN 1..1500 LOOP

 

                V_SQL_MEG:='INSERT INTO T_PROD_SALE'||V_LOOP1||' VALUES((SELECT PROD_CNNAME FROM

 

                SCOTT.T_PRODUCT_BASE WHERE PROD_ID='||V_LOOP1||'),

 

                ROUND(DBMS_RANDOM.VALUE(2,5000)),

 

                TO_DATE(TRUNC(DBMS_RANDOM.VALUE('''||V_STARTIME||''','''||V_STARTIME||'''+60)),''J''),

 

                ROUND(DBMS_RANDOM.VALUE(2,20)),

 

                ROUND(DBMS_RANDOM.VALUE(2,20)*ROUND(DBMS_RANDOM.VALUE(100,500)),1))';  

 

                EXECUTE IMMEDIATE V_SQL_MEG; 

 

            END LOOP;

 

            COMMIT WORK;

 

    END LOOP;

 

  END P_CONSTRUCT_DATA;

 

  --EXECUTE SCOTT.P_CONSTRUCT_DATE;

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值