一个存储过程中,想定义一些参数供  SQL语句使用,要求直接在存储过程中赋值。
还需要定义一个变量,用以控制循环执行的次数。
CREATE OR REPLACE PROCEDURE PROC_MT_SCRB_LJ_SZ AS

DECLARE @I INT,  --用以控制循环次数的变量
V_DATE_DATE     VARCHAR2(6) , -- 其它参数
V_DATE_YEAR     VARCHAR2(4) ,
V_DATE_MONTH    VARCHAR2(2)  V_DATE_DATE     = TO_CHAR(SYSDATE, 'YYYYMM'), -- 赋值后不变
  V_DATE_YEAR     = TO_CHAR(SYSDATE, 'YYYY'), 
  V_DATE_MONTH    = TO_CHAR(SYSDATE, 'MM')
WHILE @I <30 -- 循环30次
BEGIN
  INSERT INTO ……
初学 水平很浅,见笑了

解决方案 »

  1.   

    CREATE OR REPLACE PROCEDURE PROC_MT_SCRB_LJ_SZ
    is
    V_DATE_DATE     VARCHAR2(6) ; -- 其它参数
    V_DATE_YEAR     VARCHAR2(4) ;
    V_DATE_MONTH    VARCHAR2(2);  V_DATE_DATE     = TO_CHAR(SYSDATE, 'YYYYMM'); -- 赋值后不变
      V_DATE_YEAR     = TO_CHAR(SYSDATE, 'YYYY'); 
      V_DATE_MONTH    = TO_CHAR(SYSDATE, 'MM');
    begin
    for i in 1..30 loop -- 循环30次    
      INSERT INTO ……
      ...
    end;
      

  2.   

    CREATE OR REPLACE PROCEDURE PROC_MT_SCRB_LJ_SZ
    is
      V_DATE_DATE VARCHAR2(6) := TO_CHAR(SYSDATE, 'YYYYMM'); -- 赋值后不变
      V_DATE_YEAR VARCHAR2(4) := TO_CHAR(SYSDATE, 'YYYY');
      V_DATE_MONTH VARCHAR2(2) := TO_CHAR(SYSDATE, 'MM');
    begin
    for i in 1..30 loop -- 循环30次
      INSERT INTO ……;
      END LOOP;
    end;或者直接定义常量。
      

  3.   

    CREATE OR REPLACE PROCEDURE PROC_MT_SCRB_LJ_SZ
    is
       V_DATE_DATE CONSTANT VARCHAR2(6) := TO_CHAR(SYSDATE, 'YYYYMM'); -- 赋值后不变
       V_DATE_YEAR CONSTANT VARCHAR2(4) := TO_CHAR(SYSDATE, 'YYYY');
       V_DATE_MONTH CONSTANT VARCHAR2(2) := TO_CHAR(SYSDATE, 'MM');
    begin
       for i in 1..30 loop -- 循环30次
           INSERT INTO ……;
       END LOOP;
       ...
    end;
      

  4.   

    CREATE OR REPLACE PROCEDURE PROC_MT_SCRB_LJ_SZ AS
        
    I INT; --用以控制循环次数的变量
    V_DATE_DATE     VARCHAR2(6); -- 其它参数
    V_DATE_YEAR     VARCHAR2(4);
    V_DATE_MONTH    VARCHAR2(2);
    BEGIN
    i=1;
      V_DATE_DATE=TO_CHAR(SYSDATE, 'YYYYMM'); -- 赋值后不变
      V_DATE_YEAR=TO_CHAR(SYSDATE, 'YYYY');
      V_DATE_MONTH=TO_CHAR(SYSDATE, 'MM');
    WHILE i <=30  loop-- 循环30次      INSERT INTO ……;
      i=i+1;
    end loop;
    end;