orcale存储过程 处理参数是以逗号组成的数据集

1.create or replace PROCEDURE kqdelete(
    kqid VARCHAR2)
AS
   CURSOR kqbids--游标
  IS
    SELECT *
    FROM THE
      (SELECT CAST(STR2NUMLIST123(kqid) AS VARTABLETYPE) FROM DUAL
      );--将包含逗号的参数集通过STR2NUMLIST123函数进行处理
  v_flowid VARCHAR2(1000);--自由流表id
  v_flowsl VARCHAR2(1000);--自由流表的数据
  --国美 考勤模块 我的考勤 删除按钮
BEGIN
  COMMIT;
   
  FOR kqbid IN kqbids
  LOOP
    DELETE FROM T_FREEFLOW_TEMP WHERE DOCID=kqbid.COLUMN_VALUE;
    DELETE FROM T_FREEFLOW WHERE DOCID=kqbid.COLUMN_VALUE;
    SELECT COUNT(*) INTO v_flowsl FROM T_FREEFLOW_APPROVAL WHERE flowid=v_flowid;
    IF(v_flowsl>0)THEN
      SELECT id INTO v_flowid FROM T_FREEFLOW WHERE DOCID =kqbid.COLUMN_VALUE;
      IF(v_flowid IS NOT NULL) THEN
        DELETE FROM T_FREEFLOW_APPROVAL WHERE flowid=v_flowid;
        DELETE
        FROM T_FREEFLOW_COUNTER
        WHERE USERID IN
          (SELECT USERID FROM T_FREEFLOW_APPROVAL WHERE flowid=v_flowid
          );
        DELETE FROM T_FREEFLOW_LOG WHERE FREEFLOWID=v_flowid;
        DELETE FROM T_FREEFLOW_NODE WHERE flowid=v_flowid;
        DELETE
        FROM T_FREEFLOW_OPINION
        WHERE APPROVALID IN
          (SELECT id FROM T_FREEFLOW_APPROVAL WHERE flowid=v_flowid
          );
        DELETE FROM T_FREEFLOW_SCORE WHERE FREEFLOWID=v_flowid;
      END IF;
    END IF;
  END LOOP;
EXCEPTION
WHEN OTHERS THEN
  ROLLBACK;
  RAISE_APPLICATION_ERROR(-20010, 'ERROR:违反唯一索引约束!');

END;

2. 创建切割字符串的函数

create or replace function str2numList123( p_string in varchar2 ) return
          varTableType
           as
           v_str long default p_string || ',';
           v_n number;
           v_data varTableType := varTableType();
           begin
           loop
          v_n := to_number(instr( v_str, ',' ));
          exit when (nvl(v_n,0) = 0);
          v_data.extend;
          v_data( v_data.count ) := ltrim(rtrim(substr(v_str,1,v_n-1)));
          v_str := substr( v_str, v_n+1 );
          end loop;
          return v_data;
          end;
3.创建type类型
create or replace type varTableType as table
   of nvarchar2(40)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于 Oracle 数据库,存储过程是一种可在数据库中创建和执行的命名代码块。存储过程可接受输入参数并返回输出参数,它们可以包含 SQL 语句、控制结构和异常处理存储过程在数据库中被编译和存储,可以通过名称调用和执行。 要创建 Oracle 存储过程,可以使用 Oracle SQL Developer 或命令行工具(如 SQL*Plus)。下面是一个简单的示例来说明如何创建一个 Oracle 存储过程: ```sql CREATE OR REPLACE PROCEDURE my_procedure (input_param IN NUMBER, output_param OUT NUMBER) AS BEGIN -- 在这里编写存储过程的逻辑 -- 可以包含 SQL 语句、控制结构和异常处理 SELECT some_column INTO output_param FROM some_table WHERE some_condition = input_param; -- 可以执行其他操作或返回其他结果 END; / ``` 在上面的示例中,`my_procedure` 是存储过程的名称,`input_param` 是输入参数,`output_param` 是输出参数。在存储过程的主体中,可以编写逻辑来执行所需的操作。在这个示例中,我们从一个表中选择一个值并将其赋给输出参数。 要调用存储过程,可以使用 `EXECUTE` 或 `CALL` 命令: ```sql DECLARE output_value NUMBER; BEGIN EXECUTE my_procedure(123, output_value); -- 可以使用输出参数的值进行其他操作 END; / ``` 以上是一个简单的示例,实际的存储过程可能包含更复杂的逻辑和功能。你可以根据自己的需求编写和执行 Oracle 存储过程

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值