`

精通Oracle10编程SQL(6)访问ORACLE

阅读更多
/*
 *访问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语句没有作用行时,其属性值为FALSE
DECLARE
  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语句没有作用行时,其属性值为TRUE
DECLARE
  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;

 

分享到:
评论

相关推荐

    精通Oracle10编程SQL(1-3)PLSQL基础

    在“精通Oracle10编程SQL(8)使用复合数据类型.sql”和“精通Oracle10编程SQL(15)使用对象类型.sql”中,你会了解到Oracle10支持的复杂数据类型,如数组、集合、记录和自定义对象类型。这些数据类型允许你处理更复杂...

    精通 ORACLE SQL高级编程 学习笔记

    精通Oracle SQL【第2版】ORACLE SQL高级编程【第二版】学习笔记

    精通Oracle 10g SQL和PL SQL.zip

    本资源“精通Oracle 10g SQL和PL SQL.zip”提供了全面的学习指南,帮助用户从基础到高级进阶,掌握这两个重要组件的精髓。 SQL(Structured Query Language)是用于管理关系数据库的标准语言,它允许用户创建、查询...

    精通Oracle 10g SQL和PL SQL.pdf

    《精通Oracle 10g SQL和PL/SQL》是专门为Oracle应用开发人员所提供的SQL和PL/SQL编程指南。通过学习《精通Oracle 10g SQL和PL/SQL》,读者不仅可以掌握SQL和PL/SQL的基础知识,而且还可以掌握SQL高级特征(正则...

    《精通Oracle10编程》 PDF

    《精通Oracle10编程》是一本专为数据库管理员和开发者设计的专业书籍,旨在深入解析Oracle 10g数据库系统的各种核心技术和高级特性。Oracle 10g是Oracle公司推出的一个重要版本,它在性能、可扩展性和管理性方面都有...

    精通Oracle 10g SQL和PL/SQL

    sql是关系数据库的基本操作语言 它是应用程序与数据库进行交互操作的接口 pl/sql是oracle特有的编程语言 它不仅具有过程编程语言的基本特征 循环 条件分支等 而且还具有对象编程语言的高级特征 重载 继承等 ...

    精通ORACLE10GPLSQL编程

    精通ORACLE10GPLSQL编程 、

    精通Oracle PLSQL编程

    通过阅读《精通Oracle PLSQL编程》这本书,你将有机会掌握这些核心概念,并逐步成为一个熟练的Oracle数据库开发者。书中的实例和练习将帮助你更好地理解和应用这些技术,为你的职业生涯打下坚实的基础。

    精通Oracle10编程

    学习Oracle编程首先需要掌握SQL的基础语法,包括SELECT语句用于数据检索,INSERT用于数据插入,UPDATE用于修改已有数据,以及DELETE用于删除数据。此外,了解子查询、连接查询、集合操作等高级SQL特性也是必备技能。...

    《精通Oracle PL/SQL》源码

    《精通Oracle PL/SQL》这本书深入探讨了这个语言的各个方面,旨在帮助读者掌握其精髓并提升在数据库开发中的效率。书中提供的源码示例是学习和理解PL/SQL语法、功能以及最佳实践的重要资源。 在"2174_...

    精通Oracle10编程.pdf

    根据提供的文件信息,“精通Oracle10编程.pdf”这一资料似乎主要涵盖了Oracle 10g数据库的相关编程技术。接下来,我们将从几个方面详细解读该文档可能涉及的重要知识点。 ### 一、Oracle 10g简介 Oracle 10g是甲骨...

    Oracle 11g SQL和PL SQL从入门到精通 pdf格式电子书 下载(一)

     本书是专门为oracle应用开发人员提供的sql和pl/sql编程指南。通过学习本书,读者不仅可以掌握oracle常用工具oracle universal installer、net comfiguration assistant、sql developer、sql*plus的作用及使用方法...

    精通oracle10编程 教程 +pl/sql pdf

    本教程的"精通Oracle10编程"部分,将深入讲解如何使用PL/SQL进行数据库交互,包括变量声明、流程控制、异常处理和游标等基本概念。 在PL/SQL编程中,了解SQL DML语句(INSERT、UPDATE、DELETE)是基础,它们用于...

    精通Oracle10g SQL/PL编程.PDF

    《精通Oracle10g SQL/PL编程》是一本专为数据库开发者和管理员设计的专业书籍,旨在深入探讨Oracle10g数据库管理系统中的SQL和PL/SQL编程技术。这本书以通俗易懂的方式,为初学者提供了全面的学习路径,同时也为有...

    精通OracleSQL第2版.zip

    《精通Oracle SQL(第2版)》是一本深入解析Oracle数据库查询语言的专业书籍,由Oracle ACE和OakTable团队的专家共同撰写,集成了他们的丰富经验和专业知识。这本书旨在帮助读者掌握Oracle SQL的高级技巧,提升在...

    精通Oracle SQL编程全套教程

    这个“精通Oracle SQL编程全套教程”不仅适用于初学者,也适合有一定经验的DBA和开发者,它将全面提升你在Oracle数据库环境中的技能和效率。通过深入学习和实践,你将成为Oracle SQL编程的专家。

    精通OraclePl.SQL编程.pdf

    精通OraclePl.SQL编程.pdf

Global site tag (gtag.js) - Google Analytics