精华内容
下载资源
问答
  • oracle 代码块

    2019-03-18 16:07:47
    oracle代码块模板: declare –声明变量 begin –执行业务逻辑 exception –异常处理 end; –结束 注意:代码块每个sql语句结束都要加分号; example: declare v_id varchar(10):=‘1’; --声明字符串变量...
    • oracle 的代码块模板:

    declare

    –声明变量

    begin

    –执行业务逻辑

    exception

    –异常处理

    end;

    –结束

    注意:代码块每个sql语句结束都要加分号;

    • example:

    declare

    v_id varchar(10):=‘1’; --声明字符串变量必须带上长度
    v_name varchar(10):=‘Ben Yang’;
    v_sex Integer:=1;
    v_age Integer:=18;

    begin --begin 执行代码

    insert into test_ben values(v_id,v_name,v_sex,v_age);

    end;

    展开全文
  • ORACLE PLSQL代码块学习

    千次阅读 2017-04-22 14:53:05
    本人小小实习生,oracle小白,,刚刚接触oracle的plsql。记录下来这个学习过程,有错麻烦各位指出。 情景: 通过遍历查询一个表的结果集,得到结果集中每行结果中的其中一个字段的值,作为另一个查询的where语句...

    背景:

    本人小小实习生,oracle小白,,刚刚接触oracle的plsql块。记录下来这个学习过程,有错麻烦各位指出。

    情景:

    通过遍历查询一个表的结果集,得到结果集中每行结果中的其中一个字段的值,作为另一个查询的where语句查询条件。

    之前的解决方案是在service层中遍历第一次查询的结果集,然后在这个遍历过程中多次调用第二个查询的方法,这就导致了在控制层和业务逻辑层只需要一个方法,但到了数据交换层需要分开为两个方法,很繁琐。恰巧之前有了解到oracle中可以通过存储函数实现这个功能,所以学习了下plsql块。


    预备知识:

    1.plsql代码块基本语法:

    DECLARE

    --这里声明一些变量②和游标 ③     

    BEGIN     

    --需要执行的逻辑 包括一些游标遍历

    EXCEPTION

    --发生异常的逻辑

    END;

    2.Oracle中变量类型

      这里我就列举下我目前使用到

        NUMBER(p,s)  数值类型   p表示精度 s表示小数长度  

    例如 NUMBER(3,2) 表示的是 整数部分最大是1位,小数部分是2位的数

    NUMBER等同于NUMBER(5)

        INT 

        VARCHAR

        CHAR 

        表%ROWTYPE   例如 emp表中有 id,name,dept 三个字段, emp_row  emp%ROWTYPE ,变量emp_row 同样有 id,name,dept三个字段。

        表.字段%TYPE   例如 emp.id 是number类型的,  emp_id  emp.id%type 则表示变量emp_id和emp表的id字段是相同的。

          3.Oracle游标

    参考  http://www.iteye.com/topic/649874    


     游标的概念:游标是SQL的一个内存工作区,由系统或用户以变量的形式定义。

      游标的作用:用于临时存储从数据库中提取的数据块。

              我将游标理解为java中jdbc中的resultset 对象,相当于一个记录查询结果的虚拟表,如果想拿到其中的数据需要遍历。

      游标的应用:

    属性:

    SQL%FOUND          FETCH有结果则为true

    SQL%NOTFOUND             FETCH无结果为true

    SQL%ISOPEN                    游标打开为true

    SQL%ROWCOUNT           返回当前记录在游标中的行数


    隐式游标 

     默认起名字SQL,不用我们开启也不用关闭.DML语句会自动生成隐式游标,主要起到程序控制的作用。

    显示游标 

    声明方式: CURSOR mycursor IS select * from emp where id >5; 查询结果将会记录到游标 mycursor中


    REF游标(动态游标)

    //TODO

     

    游标的遍历方式

    		FOR   i  IN  mycursor LOOP              --这种方式会自动打开游标和关闭游标,因此务必不要重复打开,我出现过错误。
    			DBMS_OUTPUT.PUTLINE(i.id||i.name||i.dept); --i就有点类似于foreach 中的那个变量
    		END LOOP; 

    
    		OPEN mycursor;
    		LOOP
    		FETCH mycursor INTO rs;                 --FETCH类似java中iterator遍历集合的next() 即拿到了下一个元素同时将迭代指针指向下下个元素
    		EXIT WHEN mycursor%NOTFOUND;          
    		END LOOP;


    解决的问题:

    根据产品id去查询改产品有几种颜色类型,遍历这些颜色类型,每一个颜色类型找到一张图片及一些其它相关的数据。总共需要查询三个表


      code:

    declare 
      v_pid product.id%type default 877594;                  --为了以后学习存储函数做准备,这里设置默认值
      cursor colorlist is 
      select color_type from productpic where productid=v_pid group by color_type;
      v_colorid productpic.color_type%type;
      cl_id int;
      cursor v_result is
      select * from(
                         select p.cmsimage imageurl,
                                p.productid pid,
                                p.type imagetypeid,
                                p.color_type colorid,
                                c.color_name colorname,
                                c.code colorcode,
                                pt.name imagetypename,
                                p.priority pr,
                                pt.priority priority,
                                p.id imageid
                         from productpic p,catalog_imagecolor c,productpic_type pt
                         where p.productid = v_pid
                           and p.color_type = cl_id
                           and p.type in(0,11)
                           and p.color_type = c.id
                           and p.type = pt.id
                         order by p.priority
                  )where rownum=1;
     
      
    begin
                
                for cl in colorlist loop           --遍历第一个游标 在游标遍历过程中遍历第二个游标
                if cl.color_type<>0 then
    --            dbms_output.put_line('current colorid: '||cl.color_type);
                  cl_id :=cl.color_type;           
                  if v_result%isopen then        
                  close  v_result;
                  end if;
                  for rs in v_result              --遍历第二个游标  
                  loop
                      dbms_output.put_line('current imageurl: '||rs.imageurl);
                  end loop ;
                end if;
                end loop;
                exception
                when others then
                dbms_output.put_line('error!');
      
    end;

    总结: 

            通过plsql可以看出,原先需要在业务逻辑层做的判断和数据交换层分成两个方法的麻烦事,实际上在oracle中只需要写到一个存储函数中就可以解决, 同时也方便之后的维护和调用。

    第一次写博客,希望自己能坚持下去。

      


    展开全文
  • DECLARE a VARCHAR2(64) := 'Aa'; b VARCHAR2(64) := 'Bb'; c VARCHAR2(64) := 'Cc'; i NUMBER; userrow dual%rowtype; CURSOR userrows IS SEL...

    DECLARE
        a         VARCHAR2(64) := 'Aa';
        b         VARCHAR2(64) := 'Bb';
        c         VARCHAR2(64) := 'Cc';
        i         NUMBER;
        userrow   dual%rowtype;
        CURSOR userrows IS
            SELECT
                *
            FROM
                dual;

     

    BEGIN

     

        -- Exit When循环
        i := 0;
        LOOP
            EXIT WHEN ( i > 5 );
            dbms_output.put_line(i || 'Exit When循环');
            i := i + 1;
        END LOOP;
    --Loop循环

     

        i := 0;
        LOOP
            i := i + 1;
            dbms_output.put_line(i || 'Loop循环');
            IF
                i > 5
            THEN
                EXIT;
            END IF;
        END LOOP;
    -- While循环

     

        i := 0;
        WHILE i < 5 LOOP
            i := i + 1;
            dbms_output.put_line(i || 'While循环');
        END LOOP;
    --For普通循环

     

        FOR i IN 1..10 LOOP
            dbms_output.put_line(i || 'For普通循环');
        END LOOP;
    --For游标循环

     

        FOR userrow IN userrows LOOP
            dbms_output.put_line(userrow.dummy || 'For游标循环');
        END LOOP;

        dbms_output.put(a); --写入buffer但不输出
        dbms_output.put(b); --写入buffer但不输出
        dbms_output.new_line; --回车(换行),输出                             
        dbms_output.put_line('hello world!'); --输出并换行
        dbms_output.put(c); --写入buffer但不输出
        dbms_output.new_line; --回车(换行),输出
        dbms_output.new_line; --回车(换行),输出
        dbms_output.put(a || b || c); --写入buffer但不输出
    END;

    展开全文
  • 前情提要:需要写一个脚本工具,自动查询一个表 table_name1 的内容插入到另一张表 table_name2 中; 用循环语句实现,在pl/sql...发现是停在语句编辑的地方,没有执行; 解决方案: 加 / 退出编辑开始执行上面的语句;

    前情提要:需要写一个脚本工具,自动查询一个表 table_name1 的内容插入到另一张表 table_name2 中; 

    用循环语句实现,在pl/sql里可以正常运行;但是跑脚本却不行;

    定位原因:

    发现是停在语句编辑的地方,没有执行;

    解决方案:

    加 / 退出编辑开始执行上面的sql语句;

    (ps:oracle)

    declare 
    i int;
    BEGIN
    <span style="white-space:pre">	</span>i := 10070;
         FOR temp IN(SELECT name_chn FROM table_name1)
         LOOP
           begin
    		     i := i+1;
    		     insert into table_name2(ID,NAME) 
    			          values(i,temp.name_chn);
         
    		     --dbms_output.put_line(i);
             --dbms_output.put_line(temp.id_env);
         exception
    				when others then
    						dbms_output.put_line(temp.name_chn || 'prefix exists');
            end;
         END LOOP;
    END;
    -- 要加 / 退出编辑开始执行上面的语句
    /
    commit;
    exit;


    顺便附上此次的脚本,以便查阅:

    echo startBat
    cd /d D:\testTool
    sqlplus usrname/password@LOCAL_DATABASE @xxx.sql >>  D:\log\xxx.log
    Finish!! Please check log file in D:\log


    展开全文
  • 目前oracle数据库设置定时任务job调度一般有两种方式,分别是dbms_scheduler创建job调度和dbms_job创建job调度。dbms_scheduler创建job调度是在10g以后才有的,甲骨文公司为了用来替换dbms_job而提供了更强大的功能...
  • Oracle执行计划学习

    千次阅读 2014-02-26 15:27:16
    Oracle执行计划学习
  • oracle直接执行程序

    千次阅读 2015-04-16 23:35:30
    如下,可以自己做一些基本的计算或其他操作 -------------------------------------------------------------------- declare i number;  begin  for i in 1 ..... INSERT INTO test_user (id, name, ag
  • 我在mysql官方提供的查询浏览器中编辑脚本如下: begin  delete oms.* from OMS_RES_ROLE oms where ...请问是不是mysql不支持像oracle一样直接调用 begin end 来执行代码块? 如果支持谁能告诉我怎么写吗?
  • Oracle执行计划 explain plan 详解

    千次阅读 2014-10-17 15:34:33
    Oracle执行计划详解 --- 本人 作者:TTT BLOG 本文地址:http://blog.chinaunix.net/u3/107265/showart_2192657.html --- 简介:  本文全面详细介绍oracle执行计划的相关的概念,访问...
  • oracle执行计划与效率

    千次阅读 2018-04-03 09:22:55
    一:什么是Oracle执行计划?执行计划是一条查询语句在Oracle中的执行过程或访问路径的描述,注意,是查询语句。 二:怎样查看Oracle执行计划?以PLSQL为例:执行计划的常用列字段解释:基数(Rows):Oracle估计的...
  • oracle执行计划相关

    千次阅读 2016-10-14 23:51:32
    sql执行计划对于sql执行效率是至关重要的,所以对于程序开发人员和DBA而言,了解一下sql执行计划都是很有好处的。什么是执行计划sql是一种声明性语言,它和我们平时常用的c,java这些命令性语言差别很大,声明性语言...
  • oracle执行计划详解

    千次阅读 2016-03-16 22:21:23
    本文全面详细介绍oracle执行计划的相关的概念,访问数据的存取方法,表之间的连接等内容。 并有总结和概述,便于理解与记忆! +++ 目录 --- 一.相关的概念 Rowid的概念 Recursive Sql概念 Predicate...
  • ORACLE执行SQL过程

    千次阅读 2012-06-29 12:13:54
    当我们提交一条sql语句时,oracle会做哪些操作呢? Oracle会为每个用户进程分配一个服务器进程:service process(实际情况应该区分专用服务器和共享服务器),当service process接收到用户进程提交的sql语句时,...
  • Oracle错误代码集合

    万次阅读 2012-07-06 15:22:46
    ORA-17150=代码会话的参数错误 ORA-17151=Clob 太大, 无法存储在 Java 字符串中 ORA-17152=此方法仅在逻辑连接中实施 ORA-17153=此方法仅在物理连接中实施 ORA-17154=无法将 Oracle 字符映射为 Unicode ...
  • Oracle错误代码大全

    万次阅读 2013-02-03 13:10:48
    最近在网上看见一个牛人总结的oracle的错误代码大全,觉得非常的有必要,于是山寨过来看看 ORA-00001: 违反唯一约束条件 (.) ORA-00017: 请求会话以设置跟踪事件 ORA-00018: 超出最大会话数 ORA-00019:...
  • Oracle

    千次阅读 2017-02-03 02:01:26
    (block)是pl/sql的基本程序单元,编写pl/sql程序实际上就是...pl/sql由三个部分构成:定义部分、执行部分、例外处理部分。一、定义部分可定义常量、变量、游标、例外、复杂数据类型。 定义部分是从declear开始的,
  • Java误区: 静态代码块,会在类被加载时自动执行

    万次阅读 多人点赞 2014-10-16 20:13:08
    JAVA静态代码块会在类被加载时自动执行?  很多Java开发者的思想,被这个思想深深的论剑了n遍,传播这个错误思想的博客,在网上一堆,越来越多的人被轮奸。  如:...
  • oracle 错误代码一览表

    千次阅读 2011-08-21 15:12:10
    ORA-00227: 控制文件中检测到损坏的: ( ,# ) ORA-00228: 备用控制文件名长度超出了最大长度 ORA-00229: 操作不允许: 已挂起快照控制文件入队 ORA-00230: 操作不允许: 无法使用快照控制文件入队 ORA...
  • oracle错误代码大全(超详细)

    万次阅读 2018-08-16 09:36:50
    本篇文章是对oracle错误代码进行了详细的总结与分析,需要的朋友参考下 ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 ORA-00017: 请求会话以设置跟踪事件 ORA...
  • Oracle执行SQL语句的过程

    千次阅读 2011-11-29 19:02:11
    当我们提交一条sql语句时,oracle会做哪些操作呢? Oracle会为每个用户进程分配一个服务器进程:service process(实际情况应该区分专用服务器和共享服务器),当service process接收到用户进程提交的sql语句时,...
  • Oracle 错误代码(ORA)对照表

    万次阅读 2019-04-10 15:24:43
    ORA-00227: 控制文件中检测到损坏的: ( ,# ) ORA-00228: 备用控制文件名长度超出了最大长度  ORA-00229: 操作不允许: 已挂起快照控制文件入队 ORA-00230: 操作不允许: 无法使用快照控制文件入队 ORA-00231:...
  • Oracle错误代码大全 您的评价:   较差  收藏该经验 Oracle错误代码一览表,方便大家查询! Ctrl + F 可以在页面搜索。 ORA-00001: 违反唯一约束条件 (.) ORA-00017:...
  • JAVA静态代码块会在类被加载时自动执行?  很多Java开发者的思想,被这个思想深深的轮奸了n遍,传播这个错误思想的博客,在网上一堆,越来越多的人被轮奸。  如:...
  • Oracle 执行计划(Explain Plan) 说明

    千次阅读 2014-11-19 17:10:25
    如果要分析某条SQL的性能问题,通常我们要先看SQL的执行计划,看看SQL的每一步执行是否存在问题。 如果一条SQL平时执行的好好的,却有一天突然性能很差,如果排除了系统资源和阻塞的原因,那么基本可以断定是执行...
  • Oracle 定时执行计划任务

    万次阅读 2015-09-23 15:18:02
    Oracle 定时执行计划任务 Oracle 在10g 版本以前,计划任务用的是DBMS_JOB 包,10g 版本引入DBMS_SCHEDULER 来替代先前的DBMS_JOB,在功能方面,它比DBMS_JOB 提供了更强大的功能和更灵活的机制 管理,但DBMS_JOB ...
  • 在Java中执行一段SQL的代码段如下: declare var_user_no varchar2(50); begin select userName into var_user_no from user where user_id='1234'; dbms_output.put_line(var_user_no); end;...
  • 优化sql语句提高oracle执行效率

    千次阅读 2010-07-14 17:52:00
    (1)选择最有效率的表名顺序(只在基于规则的优化器中有效):   Oracle的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在  ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 75,003
精华内容 30,001
关键字:

oracle执行代码块