精通Oracle10编程SQL(6)访问ORACLE
数据库  /  管理员 发布于 5年前   283
/* *访问ORACLE*/--检索单行数据--使用标量变量接收数据DECLARE v_ename emp.ename%TYPE; v_sal emp.sal%TYPE;BEGIN select ename,sal into v_ename,v_sal from emp where empno=&no; dbms_output.put_line('雇员名:'||v_ename); dbms_output.put_line('雇员薪水:'||v_sal);END;--使用记录变量接收数据DECLARE TYPE emp_record_type IS RECORD( ename emp.ename%TYPE,sal emp.sal%TYPE); emp_record emp_record_type;BEGIN select ename,sal INTO emp_record from emp where empno=&no; dbms_output.put_line('雇员名:'||emp_record.ename); dbms_output.put_line('雇员薪水:'||emp_record.sal);END;--操纵数据--插入数据--在PL/SQL块中使用VALUES子句插入数据DECLARE v_deptno dept.deptno%TYPE; v_dname dept.dname%TYPE;BEGIN v_deptno:=&no; v_dname:='&name'; INSERT INTO dept(deptno,dname) values(v_deptno,v_dname);END;SELECT * FROM DEPT;--在PL/SQL块中使用子查询插入数据DECLARE v_deptno emp.deptno%TYPE:=&no;BEGIN INSERT INTO employee select * from emp where deptno=v_deptno;end;select * from employee;select * from emp;--更新数据--使用表达式更新列值DECLARE v_deptno dept.deptno%TYPE:=&no; v_loc dept.loc%TYPE:='&loc';BEGIN UPDATE dept set loc=v_loc where deptno=v_deptno;END;SELECT * FROM DEPT;--使用子查询更新列值--将与SCOTT岗位相同的所有雇员的工资和补助更新为与SCOTT完全相同DECLARE v_ename emp.ename%TYPE:='&name';BEGIN UPDATE emp set(sal,comm) = (select sal,comm from emp where ename=v_ename) where job=(select job from emp where ename=v_ename);END;select * from dept;--删除数据--使用变量删除数据DECLARE v_deptno dept.deptno%TYPE:=&no;BEGIN DELETE FROM dept WHERE deptno=v_deptno;END;--使用子查询删除数据--根据输入的雇员名解雇雇员所在部门的所有雇员--下例会删除SCOTT所在部门的所有雇员DECLARE v_ename emp.ename%TYPE:='&name';BEGIN delete from emp where deptno=(select deptno from emp where ename=v_ename);END;SELECT * FROM EMP;--SQL游标--SQL%ISOPEN:用于确定SQL游标是否已经打开。当在PL/SQL块中执行SELECT INTO,INSERT,UPDATE以及DELETE语句时,ORACLE会隐含地打开--游标,并且在语句执行完成之后会隐含地关闭游标,所以对于开发人员来说该属性的值永远都是FALSE,并且在开发PL/SQL应用时不需要使用该游标属性--SQL%FOUND:用于确定SQL语句执行是否成功。--语句执行是否成功是根据是否有作用行来判断,当SQL语句有作用行时,其属性值为TRUE,当SQL语句没有作用行时,其属性值为FALSEDECLARE v_deptno emp.deptno%TYPE:=&no;BEGIN update emp set sal=sal*1.1 where deptno=v_deptno; if SQL%FOUND THEN DBMS_OUTPUT.put_line('语句执行成功'); else DBMS_OUTPUT.put_line('该部门不存在雇员'); end if;END;--SQL%NOTFOUND:用于确定SQL语句执行是否成功--语句执行是否成功是根据是否有作用行来判断,当SQL语句有作用行时,其属性值为FALSE,当SQL语句没有作用行时,其属性值为TRUEDECLARE v_deptno emp.deptno%TYPE:=&no;BEGIN update emp set sal=sal*1.1 where deptno=v_deptno; if SQL%NOTFOUND THEN DBMS_OUTPUT.PUT_LINE('该部门不存在雇员'); else dbms_output.put_line('语句执行成功'); end if;end;--SQL%ROWCOUNT:游标属性SQL%ROWCOUNT用于返回SQL语句所作用的总计行数DECLARE v_deptno emp.deptno%TYPE:=&no;BEGIN update emp set sal=sal*1.1 where deptno=v_deptno; dbms_output.put_line('修改了'||SQL%ROWCOUNT||'行');END;--事务控制语句--在PL/SQL块中使用COMMIT和ROLLRACK语句DECLARE v_sal emp.sal%TYPE:=&salary; v_ename emp.ename%TYPE:='&name';BEGIN update emp set sal=v_sal where ename=v_ename; commit;EXCEPTION WHEN OTHERS THEN ROLLBACK;END;select * from emp;--在PL/SQL块中使用ROLLBACK和SAVEPOINT语句create table temp( tempid NUMBER(10))select * from dual;select * from temp;BEGIN INSERT INTO temp VALUES(1); SAVEPOINT a1; INSERT INTO temp VALUES(2); SAVEPOINT a2; INSERT INTO temp VALUES(3); SAVEPOINT a3; ROLLBACK TO a2; COMMIT;END;select * from temp;
123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..路人 在
php中使用hyperf框架调用讯飞星火大模型实现国内版chatgpt功能示例中评论 教程很详细,如果加个前端chatgpt对话页面就完美了..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号