在oracle中 PLsql程序块必须包括哪几部分?

在oracle中 PLsql程序块必须包括哪几部分?,第1张

PL/SQL块的结构如下:

DECLARE

/* 声明部分: 在此声明PL/SQL用到的变量,类型及游标,以及局部的存储过程和函数 */

BEGIN

/* 执行部分: 过程及SQL 语句 , 即程序的主要部分 */

EXCEPTION

/* 执行异常部分: 错误处理 */

END

其中 执行部分是必须的

举个例子给你说明吧:

1.编写PL程序块循环给scott.emp表中所有职工增加工资,每次增加100元,直到平均工资高于5000或任一职工的工资超过6000元为止,最后显示出给所有员工一共增加了多少工资。

2.编写一个PL块,定义一个静态游标存储scott.emp表中所有雇员的员empno、ename和sal,并使用循环打印出所有数据。

3.编写一个存储过程comSalary,分别统计储scott.emp表中所有部门的平均工资,并且只显示出工资超过3500的部门。并编写pl块调用此存储过程。

1.

declare

avg_sal number

max_sal number

i integer

begin

i:=0

loop

select avg(sal),max(sal) into avg_sal,max_sal from emp

if avg_sal<=5000 and max_sal<=6000 then

update emp set sal=sal+100

i:=i+1

else

exit

end if

end loop

commit

dbms_output.put_line('共增加工资:'||to_char(i*100))

end

2.

declare

cursor c1 is select empno,ename,sal from emp

begin

for acct in c1 loop

dbms_output.put_line('员工号:'||acct.empno||' 员工姓名:'||acct.ename||' 工资:'||acct.sal)

end loop

end

3.

create or replace procedure comSalary

as

cursor c1 is

select deptno,avg(sal) avg1 from emp group by deptno

begin

for acct in c1 loop

if acct.avg1 >3500 then

dbms_output.put_line('部门:'||acct.deptno||' 工资:'||acct.avg1)

end if

end loop

end

其实Oracle程序块,是基于oracle编程的范畴,相当于本来希望通过用其他语言写程序对oracle数据库进行 *** 作的功能,直接放在oracle数据库内部去执行了一样。可以跟存储过程一样理解。

sqldeveloper没用过,但是你这样的程序在plsql上是有错的。一些格式不同造成的吧。

比如第一行新值delare,plsql中新值这两个字符肯定是不识别的。

还有end后,plsql中需要用符合/来宣告程序块结束。

然后再回车就可以执行。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11525442.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存