Oracle存储过程执行动态sql

本文介绍了一个使用 Oracle PL/SQL 实现的动态 SQL 查询过程。此过程通过输入不同的时间范围和条件来获取专家注册表中的数据,并统计特定类别下的成功与失败次数。涉及的技术包括动态 SQL 组装、游标使用及结果统计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

create or replace PROCEDURE systemxm(starttime VARCHAR2,

shendtime VARCHAR2,

gxstarttime VARCHAR2,

gxendtime VARCHAR2,

 v_Num OUT VARCHAR2)
AS
  v_succeed VARCHAR2(1000);
  v_fail    VARCHAR2(1000);
  v_sql     VARCHAR2(1000);--动态sql条件
  v_jj       VARCHAR2(1000);
  v_sql_where_str varchar(4000);--动态sql   
BEGIN
  v_sql:='';
 if(starttime is not null) then
     v_sql:=v_sql||' and a.CREATED >= to_date('||starttime||',''yyyy-MM-dd'' )';
  end if;
   if(shendtime is not null) then
    v_sql:=v_sql||' and a.CREATED <= to_date('||shendtime||',''yyyy-mm-dd'' )+1';
  end if;
   if(gxstarttime is not null) then
    v_sql:=v_sql||' and a.item_Employ >= to_date('||gxstarttime||',''yyyy-mm-dd'' )';
  end if;
   if(gxendtime is not null) then
    v_sql:=v_sql||' and a.item_Employ <= to_date('||gxendtime||',''yyyy-mm-dd'')+1';
  end if;
    dbms_output.put_line(v_sql);--输出参数值
  v_Num:='';
  DECLARE
    --类型定义
    CURSOR c_job
    IS
      SELECT item_code FROM tlk_system_dic;
    --定义一个游标变量v_cinfo c_emp%ROWTYPE ,该类型为游标c_emp中的一行数据类型
    c_row tlk_system_dic.item_code%type;
  BEGIN
    FOR c_row IN c_job
    LOOP
    v_sql_where_str:='SELECT COUNT( b.item_name),
        b.item_name
      FROM tlk_P_ExpertRegister a
      INNER JOIN tlk_system_dic b
      ON b.item_code='''||c_row.item_code
      ||''' WHERE a.item_Account =2 and  a.item_jszVal LIKE ''%'||c_row.item_code||'%'''
     ||v_sql||' GROUP BY b.item_name';
    DBMS_OUTPUT.PUT_LINE('output:'||v_sql_where_str );   --監視SQL語句
    execute immediate v_sql_where_str   INTO v_succeed,
        v_fail; --执行SQL 
      v_Num:=v_Num||';'||v_succeed||','||v_fail;
    END LOOP;
    --抛出异常
  EXCEPTION
  WHEN NO_DATA_FOUND THEN
    v_fail    := 0;
    v_succeed := 0;
  END;
  dbms_output.put_line(v_Num);
END;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值