create or replace procedure SP_CLEAR(V_TABLE IN STRING) IS
/*---------------------------------------------------------------
--Function:delete all records of tables in v_table             //
--Author:Liaozq                                                // 
--Date:2002/10/8                                               //
--Explain:(1)v_table must like this:table1,table2,table3,...   //
          (2)Before delete records from tables,recorder thess  //
             tables.
---------------------------------------------------------------*/
  TYPE cur_type IS REF CURSOR;
  c_tab cur_type;
  v_str STRING(2000);
  v_tab t_clear.wlbmc%TYPE;
  v_sql STRING(3000);
begin
  --Get table from v_table
  --Reorder these tables
  v_str:=upper(v_table);
  v_str:=REPLACE(v_str,',',''',''');
  v_str:=''''||v_str||'''';
  v_sql:='SELECT WLBMC FROM T_CLEAR WHERE TRIM(WLBMC) IN ('||v_str||') ORDER BY BZ DESC';
  OPEN c_tab FOR v_sql;
  LOOP
    FETCH c_tab INTO v_tab;
    EXIT WHEN c_tab%NOTFOUND;
    v_sql:='delete from '||v_tab||'';
    EXECUTE IMMEDIATE v_sql;  
  END LOOP;   
  COMMIT;  
  --deal with exception 
  EXCEPTION 
    WHEN OTHERS THEN
       ROLLBACK;
       RAISE;
end SP_CLEAR;
/

解决方案 »

  1.   

    过程参数有三种: 输入,输出,输入和输出.如下内容在 SQL*Plus 运行通过.
    SQL>set serveroutput on -- 显示输出
    SQL>CREATE OR  REPLACE  PROCEDURE  prc_test(strIn VARCHAR2,strOut OUT VARCHAR2,strInOut IN OUT VARCHAR2)
    IS
    BEGIN
         strOut := 'This is Output item';
         strInOut := ' in and out item';     
         dbms_output.put_line('输入参数: ' || strIn);
         dbms_output.put_line('输出参数: ' || strOut);
         dbms_output.put_line('输入|出参数: ' || strInOut);
    END prc_test; --  建立过程SQL>var strTest1 varchar2(20); -- 定义bind变量
    SQL>var strTest2 varchar2(20); -- 定义bind变量
    SQL>exec prc_test('input',:strTest1,:strTest2); -- 调用存储过程
      

  2.   

    补充一下:
    模式说明
    I N :当当过程被调用时,实参的值将传入该过程。在该过程内部,形参类似P L / S Q L 使用的常
    数,即该值具有只读属性不能对其修改。当该过程结束时,控制将返回到调用环境,这
    时,对应的实参没有改变。
    O U T :当当过程被调用时,实参具有的任何值将被忽略不计。在该过程内部,形参的作用类似没
    有初始化的P L / S Q L 变量,其值为空(N U L L )。该变量具有读写属性。当该过程结束时,
    控制将返回调用环境,形参的内容将赋予对应的实参。(在O r a c l e 8 i 中,该操作可由
    N O C O P Y 变更。有关N O C O P Y 的详细内容,请看本章“按引用和按值传递参数”一节。)
    IN OUT :当该模式是模式IN 和O U T 的组合。当调用过程时,实参的值将被传递到该过程中。在该
    过程内部,形参相当于初始化的变量,并具有读写属性。当该过程结束时,控制将返回
    到调用环境中,形参的内容将赋予实参(在O r a c l e 8 i 中与参数N O C O P Y 有关)。
      

  3.   

    CREATE OR REPLACE PROCEDURE deldata
    as
    begin
        Execute immediate 'delete from test';
    end deldata;
    就行了
      

  4.   

    CREATE OR REPLACE PROCEDURE PRO_JF_T_O_INSERT(NY NUMBER)
    IS
    S1 VARCHAR2(1000);BEGIN     --记录日志开始
      INSERT INTO Y_LOG_PROCEDURE(XH,PROCEURE_NAME,ACTION,TIME)
      VALUES(SEQ_LOG_PROCEDURE.NEXTVAL,'PRO_JF_T_O_INSERT','BEGIN!',SYSDATE);
      COMMIT; 
     INSERT INTO O_DCHLHS_DCHLKHSRTZ(ID,CMHCID,MTGSID,WCSJ,HLID,KH,YSJE)
     SELECT SEQ_JF_T_O_1.NEXTVAL,        
            A.CMHCID,                    
            A.SFGSID,                    
            TO_DATE(A.WCSJ,'YYYYMMDD'),  
            A.CCHLID,                    
            A.KH,                        
            A.YSJE                       
     FROM T_DCHLHS_JFTZZH_VI1 A
     WHERE TO_NUMBER(SUBSTR(A.WCSJ,1,6))=NY;
    END;