PLsql

Oracle PL/SQL 实战案例


事例一

helloworld.sql

set serveroutput on

declare
  --说明部分
begin
  --程序体
  dbms_output.put_line('Hello World');
end;
/


引用型变量.sql

--查询并打印7839的姓名和薪水
set serveroutput on
declare
  --定义引用型变量
  pename emp.ename%type;
  psal   emp.sal%type;
begin

  select ename,sal into pename,psal from emp where empno=7839;
  dbms_output.put_line(pename||'的薪水是'||psal);
end;
/

记录型变量.sql

--查询并打印7839的姓名和薪水
set serveroutput on
declare
  --定义记录型变量:代表一行
  emp_rec emp%rowtype;
begin
  select * into emp_rec from emp where empno=7839;
  dbms_output.put_line(emp_rec.ename||'的薪水是'||emp_rec.sal);

end;
/

if语句.sql

--判断用户输入的数字
set serveroutput on

--接受键盘输入
--num: 是一个地址值,在该地址上,保存了输入的值
accept num prompt '请输入一个数字';

declare
  --定义数字保存键盘输入的值
  pnum number := #
begin
  if pnum = 0 then dbms_output.put_Line('您输入的是0');
    elsif pnum = 1 then dbms_output.put_Line('您输入的是1');
    elsif pnum = 2 then dbms_output.put_Line('您输入的是2');
    else dbms_output.put_Line('其他数字');
  end if;    
end;
/



循环.sql

--打印1~10
set serveroutput on
declare
  pnum number := 1;
begin
  loop
    --退出条件
    exit when pnum>10;
    dbms_output.put_line(pnum);
    
    --加一
    pnum := pnum + 1;

  end loop;
end;
/

涨工资问题.sql

--给员工涨工资,总裁1000 经理800 其他400
set serveroutput on
declare
  cursor cemp is select empno,empjob from emp;
  pempno emp.empno%type;
  pjob   emp.empjob%type;
begin
  rollback;
  open cemp;
  loop
    --取一条记录
    fetch cemp into pempno,pjob;
    exit when cemp%notfound;

    --判断
    if pjob = 'PRESIDENT' then update emp set sal=sal+1000 where empno=pempno;
      elsif pjob = 'MANAGER' then update emp set sal=sal+800 where empno=pempno;
      else update emp set sal=sal+400 where empno=pempno;
    end if;
  end loop;
  close cemp;
  
  --为什么?  --> 事务ACID
  commit;
  
  dbms_output.put_line('涨工资完成');
end;
/












09-06
PL/SQL即Procedural Language Structured Query Language,是过程语言结构化查询语言,由Oracle公司为进行Oracle数据库编程专门设计,是一种程序设计语言,有条件、循环语句,编写的程序称为存储程序或存储过程,存储在Oracle数据库内部[^1]。 ### 特性 - **过程化特性**:PL/SQL 把 SQL 的数据操纵能力与过程化语言的数据处理能力结合起来,允许使用条件判断、循环等语句,增强了 SQL 的功能。 - **模块化**:可以将代码封装成存储过程、函数、包等模块,提高代码的可重用性和可维护性。 - **异常处理**:提供了强大的异常处理机制,能够捕获和处理程序运行过程中出现的错误,增强程序的健壮性。 - **集成性**:与 Oracle 数据库紧密集成,可以直接访问和操作数据库中的数据。 ### 使用方法 #### 基本语法结构 PL/SQL 程序通常由三个部分组成:声明部分、执行部分和异常处理部分。 ```plsql DECLARE -- 声明部分,用于声明变量、常量、游标等 variable_name datatype; BEGIN -- 执行部分,包含具体的 SQL 语句和 PL/SQL 语句 variable_name := 'Hello, PL/SQL!'; DBMS_OUTPUT.PUT_LINE(variable_name); EXCEPTION -- 异常处理部分,用于捕获和处理异常 WHEN exception_type THEN DBMS_OUTPUT.PUT_LINE('An error occurred: ' || SQLERRM); END; ``` #### 变量声明与赋值 在声明部分声明变量,并在执行部分为其赋值。 ```plsql DECLARE emp_name VARCHAR2(50); emp_salary NUMBER(10, 2); BEGIN emp_name := 'John Doe'; emp_salary := 5000.00; DBMS_OUTPUT.PUT_LINE('Employee Name: ' || emp_name); DBMS_OUTPUT.PUT_LINE('Employee Salary: ' || emp_salary); END; ``` #### 条件语句 使用 `IF-THEN-ELSE` 语句进行条件判断。 ```plsql DECLARE num NUMBER := 10; BEGIN IF num > 0 THEN DBMS_OUTPUT.PUT_LINE('The number is positive.'); ELSIF num = 0 THEN DBMS_OUTPUT.PUT_LINE('The number is zero.'); ELSE DBMS_OUTPUT.PUT_LINE('The number is negative.'); END IF; END; ``` #### 循环语句 PL/SQL 支持多种循环语句,如 `FOR` 循环、`WHILE` 循环和 `LOOP` 循环。 ```plsql -- FOR 循环示例 DECLARE i NUMBER; BEGIN FOR i IN 1..5 LOOP DBMS_OUTPUT.PUT_LINE('Iteration: ' || i); END LOOP; END; -- WHILE 循环示例 DECLARE i NUMBER := 1; BEGIN WHILE i <= 5 LOOP DBMS_OUTPUT.PUT_LINE('Iteration: ' || i); i := i + 1; END LOOP; END; -- LOOP 循环示例 DECLARE i NUMBER := 1; BEGIN LOOP DBMS_OUTPUT.PUT_LINE('Iteration: ' || i); i := i + 1; EXIT WHEN i > 5; END LOOP; END; ``` ### 教程资源 - **官方文档**:Oracle 官方提供了详细的 PL/SQL 文档,是学习 PL/SQL 的权威资料。 - **在线教程**:如 W3Schools、菜鸟教程等网站提供了 PL/SQL 的入门教程,适合初学者。 - **书籍**:《Oracle PL/SQL 编程艺术》《Oracle PL/SQL 从入门到精通》等书籍深入讲解了 PL/SQL 的使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值