plsql编程基础

原文:http://blog.isdevil.com/cjerrybird/2019/03/plsql%e7%bc%96%e7%a8%8b%e5%9f%ba%e7%a1%80.html


1 简介

plsql编程 编出来的小程序相当于一个匿名函数,无法实现调用。那么如何执行呢?在编程完后,输入/.

1.1 大致结构

  • 声明部分[可选]:用来声明变量与定义常量
  • 数据执行部分:用来放置执行的语句
  • 异常部分[可选]:用来放置出现异常时候的处理语句

在以上三个部分的每个语句必须以分号结束 ; 。 PL / SQL块可以嵌套在其他PL / SQL块中。

1.2例:

DECLARE
    #定义变量
    <variable_name> <variable_type> [:= <variable_value>];
    #定义常量
    <constant_name> constant <variable_type> := <constant_value>;#常量必须在定义时初始化
BEGIN
    <execute statement>
EXCEPTION
    <异常处理>
END;

2 常用数据类型

赋值语句:=

2.1 数值类型

data_typedescription
number(p,s)p指数值中所有有效数字的个数,s值得是小数点后的位数

2.2 字符类型

data_typedescription
char(n)固定字符。n代表字符的个数,若实际输入的个数小于n则以空格填充
varchar2(n)可变长字符串

2.3 日期类型

data_typedescription
date日期

2.4 特殊类型

2.4.1引用类型
  • %TYPE
  • 引用表中某一个字段的类型
  • <variable_name> <table_name>.<col_name>%TYPE
  • %ROWTYPE
  • 引用表中一个记录的类型
  • <variable_name> <table_name>%ROWTYPE
2.4.2记录类型
  • 定义声明一个记录的结构数据类型
type <record_type_name> IS RECORD(
<variable_name1> <data_type> [not null] [:=<default_value>],
<variable_name2> <data_type> [not null] [:=<default_value>],
...,
<variable_namen> <data_type> [not null] [:=<default_value>],
);
  • 定义一个变量
<variable_name> <record_type_name>;

注:用select为变量赋值

select <col_name>[,...,<col_name>] into <variable_name> from <table_name> [where <expr>];

3 流程控制

3.1条件语句

  • IF语句
  • 格式
IF <expr> THEN
    <statement>
[ #可以没有ELSIF或者多个ELSIF段
ELSIF <expr> THEN
    <statement>
...
]
ELSE
    <statement>
    ...
END IF;    
  • CASE表达式
  • 格式
CASE <条件表达式>
    WHEN <条件表达式结果1> THEN
        <statement>
    WHEN <条件表达式结果2> THEN
        <statement>
    ...
    WHEN <条件表达式结果n> THEN
        <statement>
    [ELSE #可选
        <statement>]
END;    

3.2循环

3.2.1 LOOP循环
  • 格式
LOOP
    <statement>
    EXIT WHEN <条件表达式>;
END LOOP;    
3.2.2 WHILE循环
  • 格式
WHILE <布尔表达式> LOOP
    <statement>
END LOOP;    
3.2.3 FOR循环
  • 格式
FOR <variable_name> IN [REVERSE] <number1>..<number2> LOOP #若使用REVERSE则变量自动减一,默认自动加一
    <statement>
END LOOP;    

注:number1需要小于number2

3.2.4 标记和GOTO跳转

PL/SQL中GOTO语句可以无条件跳转到指定的标号去。

  • 格式
GOTO <label_name>;
....
<<label_name> # 标记是用<< >>括起来的标识符

注:在以下地方使用不合法,编译会出问题

  • 跳转到非执行语句前面
  • 跳转到子块中
  • 跳转到循环语句中
  • 跳转到条件语句中
  • 从异常处理部分跳转到执行
  • 从条件语句的一部分跳转到另一部分
3.2.5 NULL语句

在plsql中NULL语句是一个可执行语句,表示不执行任何操作。

3.2.6 退出语句
  • CONTINUE:满足条件时,退出当前循环的一轮循环,并继续进行当前循环的下一轮循环
  • 格式
CONTINUE WHEN <布尔表达式>
  • EXIT:满足条件时,退出当前循环
  • 格式
EXIT WHEN <布尔表达式>

参考资料:类型:http://www.voidcn.com/article/p-uguijrrc-bpu.html
参考资料:流程控制:https://www.cnblogs.com/huyong/archive/2011/05/13/2045407.html

PL/SQL编程 pl/sql(procedural language/sql)是Oracle在标准的sql语言上的扩展。pl/sql不仅允许嵌入式sql语言,还可以定义变量和常量,允许使用条件语句和循环语句,允许使用例外处理各种错误。这样使得他的功能变的更强大。缺点是移植性不好。 编写一个存储过程,向表中添加数据。 1. create table mytest (name varchar2(30),passwd varchar2(30)); 2. create or replace procedure xxc_pro1 is begin insert into mytest values ('小红','m123'); end; 3. 调用过程 exec 过程名(参数1,参数2…)或call 过程名参数1,参数2…) ① exec xxc_pro1; 或者是 ② call xxc_pro1; pl/sql可以做什么? 块:包括过程、函数、触发器、包。 编写规范: 1. 注释 --:单行注释 eg:select * from emp where empno=7788;--取得员工信息 /*……*/多行注释 2. 表示符号(变量)的命名规范: ① 当定义变量时,建议用v_作为前缀:v_ename ② 当定义常量时,建议用c_作为前缀:c_rate ③ 当定义游标时,建议用_cursor作为后缀:emp_cursor ④ 当定义例外时,建议用e_作为前缀:e_error 块(block)是pl/sql的今本程序单元,编写pl/sql程序实际上就是在编写pl/sql块;pl/sql块由三部分组成:定义部分,执行部分,例外处理部分。 declare --可选部分 /*定义部分:定义常量,变量,游标,例外,复杂数据类型*/ begin --必选部分 /*执行部分:要执行的pl/sql语句和sql语句*/ exception --可选部分 /*例外处理部分:处理运行的各种错误*/ 实例1:只包含执行部分的pl/sql块 SQL> set serveroutput on --打开输出 SQL> begin 2 dbms_output.put_line('hello'); 3 end; 4 / 说明:dbms_output是oracle提供的包,该包包含一些过程,put_line就是其中之一。 实例2:包含定义部分和执行部分 SQL> declare 2 v_ename varchar2(5); 3 begin 4 select ename into v_ename from emp where empno = &no; 5 dbms_output.put_line('雇员名'||v_ename); 6 end; 7 / 说明:&:从控制台输入变量,会弹出一个对话框。 实例3.同时输出雇员名和工资 SQL> declare 2 v_ename varchar2(20); 3 v_sal number(10,2); 4 begin 5 select ename,sal into v_ename,v_sal from emp where empno=&no; 6 dbms_output.put_line('雇员名:'||v_ename||' 工资:'||v_sal); 7 end; 8 / 包含定义,执行,和例外处理的pl/sql块。 实例4.当输入的员工号不存在时 SQL> declare 2 v_ename varchar2(20); 3 v_sal number(10,2); 4 begin 5 select ename,sal into v_ename,v_sal from emp where empno =&no; 6 dbms_output.put_line('雇员名:'||v_ename||' 工资:'||v_sal); 7 exception --异常处理部分 8 when no_data_found then 9 dbms_output.put_line('请输入正确的员工号!'); 10 end; 11 / 以上为块的基础,下面来介绍块的各个组成:过程,函数,触发器,包。 过程 过程用于执行特定的操作,当执行过程的时候,可以指定输入参数(in),也可以指定输出参数(out)。通过在过程中使用输入参数,可以讲数据输入到执行部分,通过使用输出参数,可以将执行部分的数据输出到应用环境,在pl/sql中可以使用create procedure命令来创建过程。 编写一个存储过程,可以输入雇员名和新工资来改变员工工资。 --案例 create or replace procedure xxc_pro3(newname in varchar2,newsal in number) is begin update emp set sal=newsal where ename=newname; end;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值