`

oracle plsql常见操作练习

阅读更多
这里只是plsql练习的语句
后面有个附件,说明更加详细,这里只贴出按照附件学习的plsql代码

create table test_dept(dept_id number(11) primary key,dept_name varchar2(32));


DECLARE
   Row_id UROWID;
   info VARCHAR2(40);
BEGIN
INSERT INTO test_dept VALUES (100, 'design')
RETURNING rowid, dept_name||':'||to_char(dept_id)
INTO row_id, info;
DBMS_OUTPUT.PUT_LINE('ROWID:'||row_id);
DBMS_OUTPUT.PUT_LINE(info);
END;


DECLARE
   Row_id UROWID;
   info VARCHAR2(40);
BEGIN
update test_dept t set t.dept_name = 'product' where t.dept_name = 'design'
RETURNING rowid, dept_name||':'||to_char(dept_id)
INTO row_id, info;
DBMS_OUTPUT.PUT_LINE('ROWID:'||row_id);
DBMS_OUTPUT.PUT_LINE(info);
END;

DECLARE
   Row_id UROWID;
   info VARCHAR2(40);
BEGIN
delete test_dept t where t.dept_name = 'design'
RETURNING rowid, dept_name||':'||to_char(dept_id)
INTO row_id, info;
DBMS_OUTPUT.PUT_LINE('ROWID:'||row_id);
DBMS_OUTPUT.PUT_LINE(info);
END;


DECLARE
   TYPE test_record IS RECORD(
         Code VARCHAR2(10),
         Name VARCHAR2(30) NOT NULL :='a book');
   V_book test_record;
BEGIN
   V_book.code :='123';
   V_book.name :='C++ Programming';
   DBMS_OUTPUT.PUT_LINE(v_book.code||v_book.name);
END;


DECLARE
   -- 用 %TYPE 类型定义与表相配的字段
   TYPE t_Record IS RECORD(
          T_no test_dept.dept_id%TYPE,
          T_name test_dept.dept_name%TYPE);
   -- 声明接收数据的变量
   v_dept t_Record;
BEGIN
   SELECT dept_id, dept_name INTO v_dept FROM test_dept WHERE dept_id=1000;
   DBMS_OUTPUT.PUT_LINE(TO_CHAR(v_dept.t_no)||v_dept.t_name);
END;

DECLARE
   v_dept_id test_dept.dept_id%TYPE :=&dept_id;
   -- 用 %TYPE 类型定义与表相配的字段
   TYPE t_Record IS RECORD(
          T_no test_dept.dept_id%TYPE,
          T_name test_dept.dept_name%TYPE);
   -- 声明接收数据的变量
   v_dept t_Record;
BEGIN
   SELECT dept_id, dept_name INTO v_dept FROM test_dept WHERE dept_id=v_dept_id;
   DBMS_OUTPUT.PUT_LINE(TO_CHAR(v_dept.t_no)||v_dept.t_name);
END;

DECLARE
    v_dept_id test_dept.dept_id%TYPE :=&dept_id;
    rec test_dept%ROWTYPE;
BEGIN
    SELECT * INTO rec FROM test_dept WHERE dept_id=v_dept_id;
    DBMS_OUTPUT.PUT_LINE('部门编码:'||rec.dept_id||'部门名称:'||rec.dept_name);
END;


INSERT INTO test_dept VALUES (1001, 'humanresource');
INSERT INTO test_dept VALUES (1002, 'market');
INSERT INTO test_dept VALUES (1003, 'product');
INSERT INTO test_dept VALUES (1004, 'service');

DECLARE
TYPE dept_table_type IS TABLE OF
test_dept%ROWTYPE INDEX BY BINARY_INTEGER;
my_dept_table dept_table_type;
v_count number(2) :=4;
BEGIN
FOR id_incr IN 1 .. v_count LOOP
SELECT * INTO my_dept_table(id_incr) FROM test_dept WHERE dept_id=id_incr+1000;
END LOOP;
FOR id_incr IN my_dept_table.FIRST .. my_dept_table.LAST LOOP
DBMS_OUTPUT.PUT_LINE('Department number: '||my_dept_table(id_incr).dept_id);
DBMS_OUTPUT.PUT_LINE('Department name: '|| my_dept_table(id_incr).dept_name);
END LOOP;
END;

select * from test_dept;
alter table test_dept add salary number(11) default 100;

DECLARE
   v_dept_name test_dept.dept_name%TYPE :=&dept_name;
   v_salary   test_dept.salary%TYPE;
BEGIN
   SELECT salary INTO v_salary FROM test_dept WHERE dept_name=v_dept_name;
   IF v_salary>=1500 THEN
        UPDATE test_dept SET salary = salary+100 WHERE dept_name=v_dept_name;
        DBMS_OUTPUT.PUT_LINE('编码为'||v_dept_name||'员工工资已更新!');
   ELSE
   DBMS_OUTPUT.PUT_LINE('编码为'||v_dept_name||'员工工资已经超过规定值!');
   END IF;
EXCEPTION
   WHEN NO_DATA_FOUND THEN
      DBMS_OUTPUT.PUT_LINE('数据库中没有编码为'||v_dept_name||'的员工');
   WHEN TOO_MANY_ROWS THEN
      DBMS_OUTPUT.PUT_LINE('程序运行错误!请使用游标');
   WHEN OTHERS THEN
       DBMS_OUTPUT.PUT_LINE('发生其它错误!');
END;


DECLARE
   v_dept_id test_dept.dept_id%TYPE :=&dept_id;
   e_deptno_remaining EXCEPTION;
   PRAGMA EXCEPTION_INIT(e_deptno_remaining,-00001);
   /* -2292 是违反一致性约束的错误代码 */
BEGIN
   insert into test_dept values(v_dept_id,'manager',5000);
EXCEPTION
   WHEN e_deptno_remaining THEN
      DBMS_OUTPUT.PUT_LINE('违反数据完整性约束!');
   WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE('发生其它错误!');
END;


DECLARE
   v_dept_name test_dept.dept_name%TYPE :=&dept_name;
   no_result_exception  EXCEPTION;
BEGIN
   UPDATE test_dept SET salary=salary+500 WHERE dept_name=v_dept_name;
   IF SQL%NOTFOUND THEN
      RAISE no_result_exception;
   END IF;
   commit;
   DBMS_OUTPUT.PUT_LINE('更新成功');
EXCEPTION
   WHEN no_result_exception THEN
      DBMS_OUTPUT.PUT_LINE('你的数据更新语句失败了!');
   WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE('发生其它错误!');
END;


BEGIN
   insert into test_dept values(2000,'buy',5000);
   DBMS_OUTPUT.PUT_LINE('插入数据记录成功!');
   insert into test_dept values(2000,'buy',5000);
   DBMS_OUTPUT.PUT_LINE('插入数据记录成功!');
EXCEPTION
   WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE(SQLCODE||'---'||SQLERRM);
END;

CREATE OR REPLACE FUNCTION test_get_salary(
p_dept_name VARCHAR2,
emp_count OUT NUMBER)
RETURN NUMBER IS
V_sum NUMBER;
BEGIN
SELECT SUM(salary), count(*) INTO V_sum, emp_count
FROM test_dept WHERE dept_name = p_dept_name;
RETURN v_sum;
EXCEPTION
   WHEN NO_DATA_FOUND THEN
      DBMS_OUTPUT.PUT_LINE('你需要的数据不存在!');
   WHEN TOO_MANY_ROWS THEN
      DBMS_OUTPUT.PUT_LINE('程序运行错误!请使用游标');
   WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE('发生其它错误!');
END test_get_salary;

drop function test_get_salary;

DECLARE
V_num NUMBER;
V_sum NUMBER;
BEGIN
V_sum :=test_get_salary('product', v_num);
DBMS_OUTPUT.PUT_LINE('product部门工资总和:'||v_sum||',人数:'||v_num);
END;


DECLARE
V_num NUMBER;
V_sum NUMBER;
BEGIN
V_sum :=test_get_salary(emp_count => v_num, p_dept_name => 'product');
DBMS_OUTPUT.PUT_LINE('product部门工资总和:'||v_sum||',人数:'||v_num);
END;


CREATE OR REPLACE PROCEDURE test_insert_dept_info IS
max_dept_id
BEGIN
    
   INSERT INTO test_dept VALUES(3002,'department1',3000);
   INSERT INTO test_dept VALUES(3002,'department1',3000);
END;


CREATE OR REPLACE PROCEDURE p_test_del_repeat_dept(
p_dept_name varchar2,
del_amount OUT NUMBER)
IS
v_max_dept_id number;
BEGIN
  if p_dept_name<>'' THEN
  SELECT max(dept_id), COUNT(*) INTO v_max_dept_id, del_amount
         FROM test_dept WHERE dept_name = p_dept_name;
  delete test_dept  where dept_id = v_max_dept_id;
  ELSE
  SELECT max(dept_id), COUNT(*) INTO v_max_dept_id, del_amount
         FROM test_dept WHERE dept_name = 'department1';
  delete test_dept  where dept_id = v_max_dept_id;
  END IF;

EXCEPTION
   WHEN NO_DATA_FOUND THEN
      DBMS_OUTPUT.PUT_LINE('你需要的数据不存在!');
   WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE('发生其它错误!');
END p_test_del_repeat_dept;

分享到:
评论

相关推荐

    《Oracle PLSQL 从入门到精通》.zip

    本资料《Oracle PLSQL 从入门到精通》旨在帮助初学者和进阶者全面掌握这一语言,通过深入学习,你可以更好地管理和操作Oracle数据库。 PLSQL由三部分组成:声明部分、执行部分和异常处理部分。声明部分用于定义变量...

    北风网项目培训PLSQL编程之BBS实战项目第二讲

    2. 存储过程和函数:在BBS系统中,常见的操作如用户登录验证、计算帖子热度、统计用户活跃度等,可以封装成存储过程或函数,便于调用和复用,降低代码复杂性。 3. 触发器:BBS系统中,可能需要在数据更改时自动执行...

    PLSQL经典练习共9页.pdf.zip

    PLSQL,全称为Procedural Language/Structured Query Language,是Oracle数据库系统中用于扩展SQL的编程语言。它结合了SQL的查询能力与过程式编程语言的控制结构,为数据库管理员和开发人员提供了强大的数据处理和...

    一个很全的PLSQL学习资料

    eventlog.txt通常用于记录事件或错误日志,这在学习过程中可能不太常见,但如果在练习或实验中遇到问题,查看这个文件可能会找到解决问题的线索,尤其是在运行PLSQL脚本时遇到错误的情况下。 总的来说,这个学习...

    PLSQL学习笔记(1-7)

    本“PLSQL学习笔记”将逐步讲解这些概念,通过实例和练习帮助读者巩固理解,进一步提升在Oracle数据库开发中的技能。无论你是初学者还是有经验的开发者,这份笔记都能提供有价值的参考。通过深入学习和实践,你将...

    PLSQLDev解压版.zip

    5. **版本控制集成**:PLSQL Developer可以与常见的版本控制系统如SVN、Git等集成,便于团队协作和代码版本管理。 6. **项目管理**:支持创建和管理项目,将相关的对象组织在一起,便于代码的组织和管理。 7. **...

    oracle基本练习

    总的来说,这套"Oracle基本练习"覆盖了Oracle数据库从基础到进阶的多个方面,包括表的创建与管理、视图、序列、索引、游标、查询、PL/SQL编程、异常处理、存储过程和触发器等,是学习和掌握Oracle数据库操作的宝贵...

    plsql使用文档

    在“宋红康关于oracle连接工具plsql课程”的相关课件中,可能涵盖如何在PL/SQL Developer中创建、修改和执行这些对象的方法。 1. **PL/SQL基本语法**:PL/SQL的语法结构类似于C语言,包括声明变量、控制流程(如IF-...

    oracle数据库基本操作

    ### Oracle数据库基本操作知识点 #### 一、表空间操作 **1. 文件系统:** - **创建表空间:** - 数据表空间: 使用`CREATE TABLESPACE`命令创建一个新的数据表空间。例如: ```sql CREATE TABLESPACE tablespace...

    plsql学习资料课件

    通过深入学习这些内容,并结合课件中的实例和练习,你可以逐步掌握PL/SQL的使用,从而更有效地管理和维护Oracle数据库。这些课件将帮助你理解PL/SQL的核心概念,提升你的数据库编程技能。在实际工作中,无论是数据...

    sql经典语句

    “课后SQL习题.doc”、“Oracle+SQL+PLSQL练习题(三).doc”和“讲解练习题.doc”可能提供了实际问题来帮助理解并练习这些概念。通过解决这些练习,你可以更好地掌握如何写出高效的SQL语句。 “常用SQL命令.pdf”...

    2010年oracle命令176页完整版型

    操作练习:** - 包括创建、修改和删除存储过程、函数等。 **4. 触发器:** - **创建触发器:** ```sql CREATE TRIGGER trigger_name BEFORE INSERT ON table_name FOR EACH ROW BEGIN ... END; ``` **5. Job...

    数据库操作处理笔记

    操作练习:** - 调用存储过程: ```sql execute proc_name (parameters); ``` - 调用函数: ```sql select func_name (parameters) from dual; ``` **4. 触发器:** - 创建触发器: ```sql create or ...

    2010版 - PL SQL 面试题

    标题 "2010版 - PL SQL 面试题" 提及的是针对Oracle数据库的PL/SQL编程语言的一系列面试问题,这对于准备DBA(数据库管理员)考试或求职...通过深入学习和练习这些题目,可以提升对Oracle数据库管理和开发的全面理解。

    ITSE-1345-Intro-Oracle-PL-SQL:这是ITSE 1345 PLSQL编程的全部工作

    在Oracle PL/SQL中,有几种常见的程序单元: - **存储过程**:一组预编译的PL/SQL语句,用于执行特定任务。它们可以接受参数,返回结果,并且可以被其他程序调用。 - **函数**:类似于存储过程,但必须返回一个值。...

    JAVA1达内代码.zip

    这个文件集合可能包括了达内在教授Java编程时使用的示例代码、练习题以及相关的数据库操作内容。从描述中我们可以推测,这个压缩包不仅限于Java,还涉及到了Oracle数据库的使用和一些实践测试。 【描述】中的"达内...

Global site tag (gtag.js) - Google Analytics