Oracle 隐式游标 存储过程

--隐式游标 注意变量赋值用(:=) 连接符用(||)而不是加号(+)
DECLARE
  v_pk T_PLAT_KEYWORD.ID%TYPE; --主键
  v_amount_message T_PLAT_KEYWORD_STATISTIC.AMOUNT%TYPE;
  v_amount_talk T_PLAT_KEYWORD_STATISTIC.AMOUNT%TYPE;
  CURSOR CUR IS
    SELECT DISTINCT B.NAME,B.TYPE,B.WEIXIN_PK FROM T_PLAT_KEYWORD B;
BEGIN
  FOR MY_CUR IN CUR LOOP
    v_pk:=SEQ_PLAT_KEYWORD_STATISTIC.NEXTVAL; --主键赋值

    SELECT COUNT(1) INTO v_amount_message FROM T_WEBCALL_TALK A WHERE TO_CHAR(SUBSTR(A.CONTENT,0,1000))  LIKE ‘%‘||MY_CUR.NAME||‘%‘;
    SELECT COUNT(1) INTO v_amount_talk FROM T_WEIXIN_MESSAGE T WHERE T.MESSAGE LIKE ‘%‘||MY_CUR.NAME||‘%‘;

    INSERT INTO T_PLAT_KEYWORD_STATISTIC (ID,NAME,AMOUNT,WEIXIN_PK,TYPE,CREATE_TIME)
    VALUES (v_pk,MY_CUR.NAME,(v_amount_message+v_amount_talk),MY_CUR.WEIXIN_PK ,MY_CUR.TYPE,to_char(SYSDATE,‘yyyy-MM-dd HH:mm:ss‘));
  END LOOP;
END;

--DELETE FROM T_PLAT_KEYWORD_STATISTIC
--SELECT to_char(SYSDATE,‘yyyy-MM-dd HH:mm:ss‘)  FROM dual
--TO_CHAR(SUBSTR(A.CONTENT,0,1000)) 将clob转换成字符串
-- Create sequence 创建序列
/*create sequence SEQ_PLAT_KEYWORD_STATISTIC
minvalue 1
maxvalue 999999999999
start with 11
increment by 1
nocache;*/

--将游标加入到存储过程
CREATE OR REPLACE PROCEDURE PLAT_KEYWORD_STATISTIC IS
  V_PK             T_PLAT_KEYWORD.ID%TYPE; --主键
  V_AMOUNT_MESSAGE T_PLAT_KEYWORD_STATISTIC.AMOUNT%TYPE;
  V_AMOUNT_TALK    T_PLAT_KEYWORD_STATISTIC.AMOUNT%TYPE;
  CURSOR CUR IS
    SELECT DISTINCT B.NAME, B.TYPE, B.WEIXIN_PK FROM T_PLAT_KEYWORD B;
BEGIN
  FOR MY_CUR IN CUR LOOP
    V_PK := SEQ_PLAT_KEYWORD_STATISTIC.NEXTVAL; --主键赋值

    SELECT COUNT(1)
      INTO V_AMOUNT_MESSAGE
      FROM T_WEBCALL_TALK A
     WHERE TO_CHAR(SUBSTR(A.CONTENT, 0, 1000)) LIKE
           ‘%‘ || MY_CUR.NAME || ‘%‘;
    SELECT COUNT(1)
      INTO V_AMOUNT_TALK
      FROM T_WEIXIN_MESSAGE T
     WHERE T.MESSAGE LIKE ‘%‘ || MY_CUR.NAME || ‘%‘;

    INSERT INTO T_PLAT_KEYWORD_STATISTIC (ID, NAME, AMOUNT, WEIXIN_PK, TYPE, CREATE_TIME) VALUES (V_PK, MY_CUR.NAME,  (V_AMOUNT_MESSAGE + V_AMOUNT_TALK),  MY_CUR.WEIXIN_PK,  MY_CUR.TYPE, TO_CHAR(SYSDATE, ‘yyyy-MM-dd HH:mm:ss‘));
  END LOOP;
EXCEPTION
  WHEN TOO_MANY_ROWS THEN
  DBMS_OUTPUT.PUT_LINE(‘返回值多于1行‘);
  WHEN OTHERS THEN
  DBMS_OUTPUT.PUT_LINE(‘关键字统计存储过程出错!‘);
END PLAT_KEYWORD_STATISTIC;
  
时间: 2024-10-30 23:08:15

Oracle 隐式游标 存储过程的相关文章

oracle 隐式游标,显示游标,游标循环,动态SELECT语句和动态游标,异常处理和自定义异常

游标的概念:    游标是SQL的一个内存工作区,由系统或用户以变量的形式定义.游标的作用就是用于临时存储从数据库中提取的数据块.在某些情况下,需要把数据从存放在磁 盘的表中调到计算机内存中进行处理,最后将处理结果显示出来或最终写回数据库.这样数据处理的速度才会提高,否则频繁的磁盘数据交换会降低效率.游标有两种类型:显式游标和隐式游标.在前述程序中用到的SELECT...INTO...查询语句,一次只能从数据库中提取一行数据,对于这种 形式的查询和DML操作,系统都会使用一个隐式游标.但是如果要

oracle的隐式游标

游标的概念:     游标是SQL的一个内存工作区,由系统或用户以变量的形式定义.游标的作用就是用于临时存储从数据库中提取的数据块.在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理,最后将处理结果显示出来或最终写回数据库.这样数据处理的速度才会提高,否则频繁的磁盘数据交换会降低效率. 游标有两种类型:显式游标和隐式游标.在前述程序中用到的SELECT...INTO...查询语句,一次只能从数据库中提取一行数据,对于这种形式的查询和DML操作,系统都会使用一个隐式游标.但是如果要

oracle 游标使用(隐式游标)

1.(隐式游标)从学生表里面查询xing_ming为1的找到就打印 the Policy is updated successfully. 否则打印 the policy is updated failed. Set Serveroutput on; begin update xuesheng set shu_xue = 1 where xing_ming = '1'; if SQL%Found then dbms_output.put_line('the Policy is updated s

Oracle异常处理内容,隐式游标

异常处理 create or replace procedure pr_test3(v_bh in varchar2,v_xx out t_hq_ryxx%rowtype) is begin select * into v_xx from t_hq_ryxx where bianh = v_bh; if sql%found then dbms_output.put_line('查找到数据了'); else dbms_output.put_line('未查找到数据'); end if; excep

隐式游标与程序包

隐式游标          sql游标                 insert                 delete                 update                 select(返回单行记录的查询)引用游标类型          type stucursor is ref cursor;程序包和程序包体          create or replace package pname as                      procedure

游标(隐式游标与显示游标)

游标的概念:    游标是SQL的一个内存工作区,由系统或用户以变量的形式定义.游标的作用就是用于临时存储从数据库中提取的数据块.在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理,最后将处理结果显示出来或最终写回数据库.这样数据处理的速度才会提高,否则频繁的磁盘数据交换会降低效率.游标有两种类型:显式游标和隐式游标.在前述程序中用到的SELECT...INTO...查询语句,一次只能从数据库中提取一行数据,对于这种形式的查询和DML操作,系统都会使用一个隐式游标.但是如果要提取

隐式游标和显式游标

隐式游标的例子

【转载】关于oracle隐式转换以及转换时的优先级问题

以下转载自:http://blog.itpub.net/29324876/viewspace-1096741/ Oracle中对不同类型的处理具有显式类型转换(Explicit)和隐式类型转换(Implicit)两种方式,对于显式类型转换,我们是可控的,但是对于隐式类型转换,当然不建议使用, 因为很难控制,有不少缺点,但是我们很难避免碰到隐式类型转换,如果不了解隐式类型转换的规则,那么往往会改变我们SQL的执行计划,从而可能导致效率降低或其它问题.   1.1  隐式转换发生场景 1.对于INS

关于ORACLE隐式转换后性能问题

SELECT TM.MONEY_CODE FROM T_CONTRACT_MASTER T,T_MONEY TM WHERE T.MONEY_ID = TM.MONEY_ID AND T.POLICY_CODE = ? 问题出现: 今儿生产代码性能扫描这段脚本被揪出来了,原因是这玩意儿执行时间过长,把后面的代码兄弟都给堵住了,然后发现这家伙在做全表扫,一 开始纳闷,这不对啊,T.POLICY_CODE上面明明白白的建这索引呢,咋就能全表扫呢,既然会全表扫导致性能下降,那为什么开发环境没有 发现问