绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
pl/sql之base
2022-05-07 17:21:32

PL/SQL 块是构成 PL/SQL 程序的基本单元
PL/SQL 分为三个部分,声明部分、可执行部分和异常处理部分.

[ DECLARE
declarations ]
BEGIN
executable statements;
[ EXCEPTION
handlers ]
END;

加粗样式声明变量和常量的语法:
identifier [CONSTANT] datatype [NOT NULL] [:= | DEFAULT expr];

给变量赋值有两种方法:
1:使用赋值语句 :=
2:使用 SELECT INTO 语句

DECLARE
v_code VARCHAR2(6);
c_rate CONSTANT NUMBER := 0.10;
p_code VARCHAR2(20);
p_rate NUMBER;
BEGIN
v_code := 'i205';
SELECT code, price * c_rate
INTO p_code, p_rate
FROM itemfile
WHERE code = v_code;
END;

1,LOB 类型的数据库列仅存储定位符,该定位符指向大型对象的存储位置;
2,DBMS_LOB程序包用于操纵 LOB 数据;

SET SERVEROUTPUT ON
DECLARE
clob_var CLOB;
amount INTEGER;
offset INTEGER;
output_var VARCHAR2(100);
BEGIN
SELECT chapter_text
INTO clob_var
FROM my_book_text
WHERE chapter_id = 5;
amount := 24; -- 要读取的字符数
offset := 1; -- 起始位置
DBMS_LOB.READ(clob_var,amount,offset,output_var);
DBMS_OUTPUT.PUT_LINE(output_var);
END;
/
1

用于引用数据库列的数据类型,以及表示表中一行的记录类型;
属性类型有两种:
%TYPE - 引用变量和数据库列的数据类型;
%ROWTYPE - 提供表示表中一行的记录类型;
使用属性类型的优点:
不需要知道被引用的表列的具体类型;
如果被引用对象的数据类型发生改变,PL/SQL 变量的数据类型也随之改变,健壮性;

在PL/SQL中取出序列的nextval、currval时,可以不使用
select语句,可以类似:

declare
aa int;
begin
aa := seq1.nextval;
dbms_output.put_line('aa的值是:' || aa );
end;

逻辑比较用于比较变量和常量的值,这些表达式称为布尔表达式;
布尔表达式由关系运算符与变量或常量组成;
布尔表达式的结果为TRUE、FALSE或NULL,通常由逻辑运算符AND、OR和NOT连接;
布尔表达式有三种类型:
数字布尔型;
字符布尔型;
日期布尔型;

PL/SQL 支持的流程控制结构:
条件控制
IF 语句

IF-THEN、IF-THEN-ELSE 和 IF-THEN-ELSIF
1
CASE 语句
循环控制
LOOP 循环
WHILE 循环
FOR 循环
note :
循环控制语句包括:LOOP、EXIT 和 EXIT WHEN 、FOR 、WHILE
循环控制的三种类型:
LOOP - 无条件循环
WHILE - 根据条件循环
FOR - 循环固定的次数

LOOP
sequence_of_statements
END LOOP;

WHILE condition LOOP
sequence_of_statements
END LOOP;

FOR item IN [REVERSE] value1..value2 LOOP
sequence_of_statements
END LOOP;

顺序控制
GOTO 语句 - 无条件地转到标签指定的语句
NULL 语句 - 什么也不做的空语句

oracle11g新增了continue语句:

declare
j number := 1;
begin
loop
j := j + 1;
exit when j>8;
continue when j>4;
dbms_output.put_line(to_char(j)||'---');
end loop;
end;


动态 SQL 是指在PL/SQL程序执行时生成的 SQL 语句:
1, 编译程序对动态 SQL 不做处理,而是在程序运行时动态构造语句、对语句进行语法分析并执行;
2, DDL 语句命令和会话控制语句不能在 PL/SQL 中直接使用,但是可以通过动态 SQL 来执行;
执行动态 SQL 的语法:

EXECUTE IMMEDIATE dynamic_sql_string
[INTO define_variable_list]
[USING bind_argument_list];
1
2
3
异常有两种类型:
预定义异常 - 当 PL/SQL 程序违反 Oracle 规则或超越系统限制时隐式引发
用户定义异常 - 用户可以在 PL/SQL 块的声明部分定义异常,自定义的异常通过 RAISE 语句显式引发

DECLARE
invalidCATEGORY EXCEPTION;
category VARCHAR2(10);
BEGIN
category := '&Category';
IF category NOT IN ('附件','顶盖','备件') THEN
RAISE invalidCATEGORY;
ELSE
DBMS_OUTPUT.PUT_LINE('您输入的类别是'|| category);
END IF;

EXCEPTION
WHEN
invalidCATEGORY
THEN
DBMS_OUTPUT.PUT_LINE('无法识别该类别');
END;

RAISE_APPLICATION_ERROR 过程
用于创建用户定义的错误信息;
可以在可执行部分和异常处理部分使用;
错误编号必须介于 –20000 和 –20999 之间;
错误消息的长度可长达 2048 个字节;
引发应用程序错误的语法:
RAISE_APPLICATION_ERROR(error_number, error_message);
————————————————
版权声明:本文为CSDN博主「Michael_lcf」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Michael_lcf/article/details/86502568

分享好友

分享这个小栈给你的朋友们,一起进步吧。

SQLBase
创建时间:2022-03-30 11:00:13
SQLBase
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • 飘絮絮絮丶
    专家
戳我,来吐槽~