这里只是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 从入门到精通》旨在帮助初学者和进阶者全面掌握这一语言,通过深入学习,你可以更好地管理和操作Oracle数据库。 PLSQL由三部分组成:声明部分、执行部分和异常处理部分。声明部分用于定义变量...
2. 存储过程和函数:在BBS系统中,常见的操作如用户登录验证、计算帖子热度、统计用户活跃度等,可以封装成存储过程或函数,便于调用和复用,降低代码复杂性。 3. 触发器:BBS系统中,可能需要在数据更改时自动执行...
PLSQL,全称为Procedural Language/Structured Query Language,是Oracle数据库系统中用于扩展SQL的编程语言。它结合了SQL的查询能力与过程式编程语言的控制结构,为数据库管理员和开发人员提供了强大的数据处理和...
eventlog.txt通常用于记录事件或错误日志,这在学习过程中可能不太常见,但如果在练习或实验中遇到问题,查看这个文件可能会找到解决问题的线索,尤其是在运行PLSQL脚本时遇到错误的情况下。 总的来说,这个学习...
本“PLSQL学习笔记”将逐步讲解这些概念,通过实例和练习帮助读者巩固理解,进一步提升在Oracle数据库开发中的技能。无论你是初学者还是有经验的开发者,这份笔记都能提供有价值的参考。通过深入学习和实践,你将...
5. **版本控制集成**:PLSQL Developer可以与常见的版本控制系统如SVN、Git等集成,便于团队协作和代码版本管理。 6. **项目管理**:支持创建和管理项目,将相关的对象组织在一起,便于代码的组织和管理。 7. **...
总的来说,这套"Oracle基本练习"覆盖了Oracle数据库从基础到进阶的多个方面,包括表的创建与管理、视图、序列、索引、游标、查询、PL/SQL编程、异常处理、存储过程和触发器等,是学习和掌握Oracle数据库操作的宝贵...
在“宋红康关于oracle连接工具plsql课程”的相关课件中,可能涵盖如何在PL/SQL Developer中创建、修改和执行这些对象的方法。 1. **PL/SQL基本语法**:PL/SQL的语法结构类似于C语言,包括声明变量、控制流程(如IF-...
### Oracle数据库基本操作知识点 #### 一、表空间操作 **1. 文件系统:** - **创建表空间:** - 数据表空间: 使用`CREATE TABLESPACE`命令创建一个新的数据表空间。例如: ```sql CREATE TABLESPACE tablespace...
通过深入学习这些内容,并结合课件中的实例和练习,你可以逐步掌握PL/SQL的使用,从而更有效地管理和维护Oracle数据库。这些课件将帮助你理解PL/SQL的核心概念,提升你的数据库编程技能。在实际工作中,无论是数据...
“课后SQL习题.doc”、“Oracle+SQL+PLSQL练习题(三).doc”和“讲解练习题.doc”可能提供了实际问题来帮助理解并练习这些概念。通过解决这些练习,你可以更好地掌握如何写出高效的SQL语句。 “常用SQL命令.pdf”...
操作练习:** - 包括创建、修改和删除存储过程、函数等。 **4. 触发器:** - **创建触发器:** ```sql CREATE TRIGGER trigger_name BEFORE INSERT ON table_name FOR EACH ROW BEGIN ... END; ``` **5. Job...
标题 "2010版 - PL SQL 面试题" 提及的是针对Oracle数据库的PL/SQL编程语言的一系列面试问题,这对于准备DBA(数据库管理员)考试或求职...通过深入学习和练习这些题目,可以提升对Oracle数据库管理和开发的全面理解。
在Oracle PL/SQL中,有几种常见的程序单元: - **存储过程**:一组预编译的PL/SQL语句,用于执行特定任务。它们可以接受参数,返回结果,并且可以被其他程序调用。 - **函数**:类似于存储过程,但必须返回一个值。...
这个文件集合可能包括了达内在教授Java编程时使用的示例代码、练习题以及相关的数据库操作内容。从描述中我们可以推测,这个压缩包不仅限于Java,还涉及到了Oracle数据库的使用和一些实践测试。 【描述】中的"达内...