oracle代码块怎么写,oracle 代码

Oracle游标sql语句代码块的优化

游标操作的优化:

创新互联建站专注于企业网络营销推广、网站重做改版、雨山网站定制设计、自适应品牌网站建设、HTML5商城系统网站开发、集团公司官网建设、成都外贸网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为雨山等各大城市提供网站开发制作服务。

-- 有一个表格,存储的是用户的名字,将 emp 表中所有的用户名转换成小写,再写入这个表格

create table ename_emp(

ename varchar2(50)

);

-- 下面这个游标的操作,需要 43s时间才能完成

declare

begin

for i in (select ename from emp_liebiao) loop

insert into ename_emp values(lower(i.ename));

commit;

end loop;

end;

-- 因为游标是以行为单位进行数据的操作的,所有游标的效率是比较慢的,而且游标需要消耗的内存也是比较多的,我们需要将游标以行进行操作的方式,修改成一次性操作所有数据的批量的方式。

批量操作在游标里面 叫做 bulk collect

第一步,创建一个表类型

type 表类型的名字 is table of 表名.列名 %type;

变量名 表类型的名字;

第三步,创建一个游标,读取某个查询的结果

cursor 游标名字 is select 查询语句 ;

第四步,打开游标

open 游标名字;

第五步,捕获游标的数据,将内容给到表类型的变量进行保存

fetch 游标名字 bulk collect into 变量名字 ;

第六步,使用 forall 语句,对数据进行批量的操作

forall i in 变量 .first .. 变量 .last DML 语句操作 ;

第七步,关闭游标

close 游标名字 ;

declare

-- 创建表类型

type biao is table of emp_liebiao.ename%type;

b biao;

-- 创建游标

cursor m is select ename from emp_liebiao;

begin

-- 打开游标

open m;

-- 将游标的内容批量的给到变量

fetch m bulk collect into b;

-- 使用forall批量修改数据

forall i in b.first .. b.last insert into ename_emp values(lower(b(i)));

commit;

-- 关闭游标

close m;

end;

练习:批量修改用户的编号,让编号+工资等级+部门,形成一个新的编号,存入下面的表格中,使用 bulk collect 来实现。

2000以下是 C ,2000-3000是 B ,3000以上是 A ,

例如 SMITH , 新编号应该是 7369_C_20

create table empno_emp(

empno varchar2(50)

);

declare

type biao is table of emp_liebiao%rowtype;

b biao;

cursor m is select * from emp_liebiao;

begin

open m;

fetch m bulk collect into b;

forall i in b.first..b.last

insert into empno_emp values(

b(i).empno||'_'||decode(sign(b(i).sal-2000)+sign(b(i).sal-3000),-2,'C',2,'A','B')||'_'||b(i).deptno

);

commit;

close m;

end;

oracle的plsql块,存储过程,函数怎么写增删改查

首先在PL/SQL的左侧资源栏中展开Procedures项(图中位置1),然后再其上面的搜索框中(图中位置2)输入存过名称的关键词,按回车键搜索要调试的存过,不停的回车,直到找到想要调试的存过。

找到想要调试的存过,左键单击选中该存过(图中位置1),然后右键单击该存过,从弹出菜单中选择“Test”项(图中位置2)。

单击“Test”后,PL\SQL会打开调试界面,图中位置1的按钮就是开始调试的按钮,在调试之前要填写存过的参数,位置2就是填写参数的地方,如果有多个参数,会有多行参数框,按参数名填写相应的参数即可。

填写完参数,单击开始调试按钮后,调试的界面会发生一些变化。图中位置1的变化,说明存过已经处于执行状态,别人不能再编译或者执行。位置2的按钮就是执行按钮,单击这个按钮存过会执行完成或者遇到bug跳出,否则是不会停下来的,调试时不会用这个按钮的。位置3的按钮才是关键——单步执行,就是让代码一行一行的执行,位置4的按钮是跳出单步执行,等待下一个指令。

单击“单步执行”,存过开始单步执行。界面中每一次执行的代码会高亮显示(图中位置1),如果想要看某个变量具体的值,就在位置2的地方输入该变量名,然后变量的值会显示在位置3的地方。

调试的时候,每一次单步执行的时候要记一下执行代码的行数,图中位置3的数字就是当前执行代码的行数,就是第几行。如果过程单步执行到某行后,再单步执行的时候,存过就退出,那么错误就在该行的下一行。

代码执行到24行,在往下执行时,直接转到exception的地方,也就是异常处理的部分。

这说明我们代码中的错误在24和25行上,我们打开存过,浏览到24行和25行附近,发现25行和24行使用了两个变量,记住那两个变量。重新开始调试过程。

单步的执行时候把刚才那两个变量名填写到变量查看框,一边观察变量值变化,一边单步执行,执行到24行的时候,发现一个变量已经有值了,而另一个变量的值为null。错误原因明朗了吧?就是变量没有赋值或者初始话,给该变量赋值后存过就不报错了。

oracle begin 语句块求助!!

给你个例子,不知道是不是你说的这样

先说一下,oracle不能直接用select语句而不把查出的结果放到变量里,不过可以这样

--这个是只能输出一条记录,多了会报错,因为一个变量只能接收一个数值

declare

v_a int;

v_b number(10,2);

begin

select empno,sal into v_a,v_b from emp where empno=7369 ;

dbms_output.put_line(v_a||','||v_b);

end;

--再给你写个结果集的

declare

v_a int;

v_b number(10,2);

cursor v_cur is select empno,sal from emp order by empno;

begin

open v_cur;

loop

fetch v_cur into v_a,v_b;

exit when v_cur%notfound;

dbms_output.put_line(v_a||','||v_b);

end loop;

close v_cur;

end;

Oracle代码块中语句重复使用问题

with as 只能被sql查询一次,之后就被销毁了,你说的这种,貌似在后续代码中多次调用,这样就不适合了。

这种子查询没什么更好的办法,用数据集或临时表吧。

Oracle的匿名代码块中重复调用一个子过程如何实现

无名块或匿名块,只能执行一次,可调用其它程序,但不能被其它程序调用。你想多次调用匿名块可能行不通


当前文章:oracle代码块怎么写,oracle 代码
文章网址:http://scjbc.cn/article/hoodsd.html

其他资讯