-
set serveroutput on
declare
-- 定义光标
cursor cemp is select to_char(hiredate,'yyyy') from emp;
phiredate varchar2(4);
-- 每年入职的员工人数
count80 number:=0;
count81 number:=0;
count82 number:=0;
count87 number:=0;
begin
open cemp;
loop
-- 取出员工的入职年份
fetch cemp into phiredate;
exit when cemp%notfound;
-- 判断入职年份
if phiredate='1980' then count80:= count80+1;
elsif phiredate='1981' then count81:=count81+1;
elsif phiredate='1982' then count82:=count82+1;
else count87:=count87+1;
end if;
end loop;
close cemp;
--输出结果
dbms_output.put_line('Total:'||(count80+count81+count82+count87));
dbms_output.put_line('1980:'||count80);
dbms_output.put_line('1981:'||count81);
dbms_output.put_line('1982:'||count82);
dbms_output.put_line('1987:'||count87);
end;
/查看全部 -
使用基本的数据类型 declare --定义基本变量类型 --基本数据类型 pnumber number(7,2); --字符串变量 pname varchar2(20); --日期变量 pdate date; begin pnumber :=1; dbms_output.put_line(pnumber); pname :='Tom'; dbms_output.put_line(pname); pdate=sysdate; dbms_output_line(pdate); ---计算明天的日期 dbms_output.put_line(pdate +1); end; /查看全部
-
学习PLSQL的目的: 一、操作Oracle效率最高 二、在于继续学习存储过程,存储函数和触发器 declare --说明部分(变量,光标或者例外) begin --程序体 dbms_output.put_line('Hello World'); end; / set serveroutput on --打开输出开关 --查看程序包的结构 desc dems_output查看全部
-
/* 1. 光标的属性 %found %notfound %isopen; 判断光标是否打开 true / false %rowcount; 影响的行数 2. 光标数的限制:默认情况下,Oracle数据库只允许在同一个回话中,打开300个光标 -- 切换到管理员 show user conn sys/password@192.168.56.101:1521/orcl as sysdba show parameter -- 做的是模糊查询 show parameter cursor -- 修改光标数的限制 alter system set open_cursors=400 scope=both; scope的取值:both、memory(只更改当前实例,不更改参数文件)、spfile(只更改参数文件,不更改当前实例,数据库需要重启才会生效) */ set serveroutput on declare cursor cemp is select empno,empjob from emp; pempno emp.empno%type; pjob emp.empjob%type; begin open cemp; if cemp%isopen then dbms_output.put_line('光标已经打开'); else dbms_output.put_line('光标没有打开'); end if; loop fetch cemp into pempno,pjob; exit when cemp%nofound; dbms_output.put_line('rowcount:'||cemp%rowcount); end loop; close cemp; end; /查看全部
-
PL/SQL的程序结构 declare 说明部分 (变量说明、光标申明、例外说明) 定义基本变量或常量 类型:char,varchar2,date,number,boolean,long 例: pname varchar2(20); pdate date; married boolean := true; -- 赋值 := pnumber number(7,2); begin 语句序列 (DML语句) pnumber:=1; dbms_output.put_line(pnumber); pname:='Tom'; dbms_output.put_line(pname); pdate:=sysdate; dbms_output.put_line(pdate); exception 例外处理语句 end; /查看全部
-
set serveroutput on declare cursor cemp is select empno,sal from emp order by sal; pempno emp.empno%type; psal emp.sal%type; pcount number := 0; ptotal number; begin select sum(sal) into ptotal from emp; --打开光标 open cemp; loop fetch cemp into pempno,psal; exit when cemp%notfound; --工资总额>50000退出 exit when ptotal + psal*0.1>50000; ptotal := ptotal + psal*0.1; pcount := pcount + 1; update emp set sal = sal + sal * 0.1 where empno=pempno; end loop; --关闭光标 close cemp; commit; DBMS_OUTPUT.PUT_LINE('涨工资人数:'||pcount||',涨后工资总额:'||ptotal); end; /查看全部
-
连接MySQL数据库查看全部
-
set serveroutput on declare Cursor cdep is select dno, dname from dep; pdno dep.dno%type; pdname dep.dname%type; Cursor csc(p_cname course.cname%type, p_dno student.dno%type) is select grade from sc where cno = (select cno from course where cname = p_cname) and sno in (select sno from student where dno = p_dno); pgrade sc.grade%type; count1 number; count2 number; count3 number; avggrade number; begin open cdep; loop fetch cdep into pdno, pdname; exit when cdep%notfound; count1 := 0; count2 := 0; count3 := 0; avggrade := 0; open csc('大学物理', pdno); loop fetch csc into pgrade; exit when csc%notfound; if pgrade < 60 then count1 := count1 + 1; elsif pgrade < 85 then count2 := count2 + 1; else count3 := count3 + 1; end if; avggrade := avggrade + pgrade; end loop; avggrade := avggrade / (count1 + count2 + count3); insert into msg1 values ('大学物理', pdname, count1, count2, count3, avggrade); close csc; end loop; close cdep; end; /查看全部
-
/* 1.得到有哪些系 select dno, dname from dep;-->光标-->循环-->退出条件:notfound; 2.得到系中,选修了“大学物理”课程学生的成绩 select grade from sc where cno = (select cno from course where cname = ??) and sno in (select sno from student where dno = ??) --> 带参数的光标-->循环-->退出条件:notfound 变量:1.初始值 2.如何得到 每个分数段的人数 count1 number; count2 number; count3 number; 每个系选修了“大学物理”学生的平均成绩 avggrade number; 1. 算术运算 2. select avg(grade) into avggrade from sc where cno = (select cno from course where cname = ??) and sno in (select sno from student where dno = ??); */查看全部
-
系统例外: 1.No_date_found(没有找到数据) 2.Too_many_rows (select...into语句匹配多个行) 3.Zero_Divide (被零除) 4.Value_error (算术或转换错误) 如:负数在实数范围开平方,abc字符串 转换成 数字123 5.Timeout_on_resource (等待资源时发生超时)比较典型的场景:分布式数据库查看全部
-
光标的属性: %found 是否取到值 true/false %notfound 是否未取到值 true/false %isopen 光标是否打开 true/false %rowcount 影响的行 光标数的限制:系统默认300 修改光标数限制 alter system set open_cursors=400 scope=both scopt属性:memory(只该当前实例),spfile(只改参数文件,数据库需要重启),both(两者都改)查看全部
-
No_data_found 很容易理解就是没有数据返回。 Too_many_rows 在我们使用 select ... into 的时候这种错误经常的会发生,就是因为其返回了多条内容。 Zero_Divide 被零除。 Value_error 算数或者转换错误,比如说我们想把一个字符串 “abc” 转换成一个整数类型的数据 Time_on_resource 等待资源的时候由于时间过长会有这样的例外发生。查看全部
-
说明部分: 1.引用型变量:my_name emp.ename%type;引用emp中ename列的的属性 2.记录型变量的引用:emp_rec emp%rowtype;取表中一行的类型 理解成数组。 记录型变量分量的引用 emp_rec.ename:='ADAMS';取表中一行中的其中一个的类型 例子: 1)引用型变量 set serveroutput on declare --定义引用型变量:查询并打印7839的姓名和薪水 --pename varchar2(20); --psal number; pename emp.ename%type; psal emp.sal%type; begin --得到7839的姓名和薪水 select ename,sal into pename,psal from emp where empno=7839; --打印姓名和薪水 DBMS_OUTPUT.PUT_LINE(pename||'的薪水是'||psal); end; / 2)记录型变量 --使用记录型变量,查询并打印7839的姓名和薪水 set serveroutput on declare --定义记录型变量:注意代表某一行 emp_rec emp%rowtype; begin --得到7839一行的信息 select * into emp_rec from emp where empno='7839'; dbms_output.put_line(emp_rec.ename||'的薪水是'||emp_rec.sal); end;查看全部
-
1.2PL/SQL的作用 ResultSet rs="select empno,job from emp"; while(rs.next()){ int eno=rs.getInt("empno"); String job=rs.getString("job"); if("PRESIDENT".equals(job)){ update emp set sal=sal+1000 where empno=eno; }else if("MANAGER".equals(job)){ update emp set sal=sal+800 where empno=eno; }else { update emp set sal=sal+400 where empno=eno; } } PLSQL作用:操作数据库的效率更高,便于存储; declare --说明部分 begin --程序体 dbms_output.put_line("Hello World"); end; / --打开输出开关 set serveroutput on / --查看程序包的结构 desc dbms_output查看全部
-
if判断1: if 条件 then 语句1; 语句2; end if; if判断2: if条件then语句; elsif 语句then语句; else 语句; end if; 注意:elsif没有e 且是连在一起的查看全部
举报