ORACLE数据库PLSQL笔记

**

-ORACLE数据库PLSQL笔记**

   **PL/SQL**是Oracle的程序设计语言,用于扩展SQL的编程能力,为数据库程序增加了许多可能的功能。
   它允许将过程控制语句与 SQL语句结合使用Oracle 特有的编程语言PL/SQL补充了标准的关系数据库语言SQL,
   提供了各种过程化特性,包括循环、IF-THEN语句、高级数据结构以及丰富的事务控制,这些都紧密地集成到Oracle数据库服务器中。

PL/SQL语句块分为两种
匿名块和命名块
匿名块是没有被命名的块。他们是在应用程序即将执行时被声明,在运行期间被传递给PL/SQL engine执行。
命名块是子程序是被命名的 PL/SQL 块,能接收变量,能被调用。它可以声明为过程也可以为函数,通常仅执行一动作时定义为过程,计算值时定义为函数。

主体

declare(可选)
//这里插入变量{命名规则:变量v_xx,常量c_xx,游标xx_cuosor,例外e_xx}
begin(必要)
//sql/plsql语句/(输出)dbms_output.put_line("");
exception(异常 可选)
end(必要)

变量基本类型
NUMBER [( 精度, 刻度 )]
n INT
n DATE
n VARCHAR2 ( 长度 ) (最大2000个字符)
n CHAR [( 长度 )](最大255个字符)
n LONG (最长2G)
n BOOLEAN
n BINARY_INTEGER
n PLS_INTEGER

绑定变量使用前先声明
例子1
定义一个匿名块,实现如下功能:
(1)根据下面的要求声明两个变量V_CHAR和V_NUM,变量名称、类型以及值如下:
V_CHAR :可变字符串,长度50,值为原义字符串 ‘42 is the answer’ V_NUM :数值型,值为变量V_CHAR的头两个字符 (必须使用函数获得)
(2)把这两个PL/SQL变量分别赋值给SQL *Plus绑定变量G_CHAR和G_NUM,执行该块。
(3)用命令输出SQL *Plus绑定变量的结果。

variable g_char varchar2(50); variable g_num number;

DECLARE 
v_char VARCHAR2(50) :='42 is the answer';
v_num NUMBER :=TO_NUMBER(SUBSTR(V_CHAR,1,2));

BEGIN
:g_char:=v_char;
:g_num:=v_num;
END;

显示 print v-char;

%TYPE 和%ROWTYPE数据类型的区别
例子2:
定义一个匿名块,查询雇员BLAKE所在的部门,在屏幕上显示该部门的部门名和地址。要求分别用两种方法完成:自定义的记录类型变量和%rowtype定义变量。

--第一种
DECLARE 
c_dName DEPT.DNAME%TYPE;
c_dLoc DEPT.LOC%TYPE;
BEGIN
	SELECT DNAME ,LOC INTO  c_dName,c_dLoc FROM EMP,DEPT WHERE emp.DEPTNO=dept.DEPTNO AND ENAME='BLAKE';
	dbms_output.put_line (c_dName || ',' || c_dLoc );
END;
ed
--第二种
DECLARE 
c_dept DEPT%rowtype;
BEGIN
	SELECT DNAME ,LOC INTO  c_dept.DNAME,c_dept.LOC FROM EMP,DEPT WHERE emp.DEPTNO=dept.DEPTNO AND ENAME='BLAKE';
	dbms_output.put_line (c_dept.DNAME || ',' || c_dept.LOC );
END;

%TYPE是声明一个与指定 列 或已定义 变量 相
同的数据类型。
%ROWTYPE使用
%ROWTYPE是 根据指定的表结构定义数据类型,用于存储数
据表中检索到的 一行数据。

sql plus中文乱码问题(参考)比较有效
https://jingyan.baidu.com/article/48b558e33242ad7f38c09af8.html

FOR UPDATE 子句 和 WHERE CURRENT OF 子句
FOR UPDATE 子句:
当希望使用游标更新数据库的表时,可以使用
游标 FOR UPDATE 子句。
n 使用 FOR UPDATE子句的目的是锁定希望更
新的数据库表中的数据行,以便于在执行完更
新操作和释放该锁之前,其他人不能执行更新
WHERE CURRENT OF:
先要在游标中使用 FOR UPDATE 子句锁定行。使用 WHERE CURRENT OF 子句从显式游标中引用当前行
5.7.5 使用游标更新或删除
数据
2、WHERE CURRENT OF 子句
游标名是已声明过的游标名 (游标必须用FOR UPDATE 子句中已经声明过)要先用 FORUPDATE 子句锁定行然后使用 WHERE CURRENT OF 子句从显式游标中引用当前行

你可能感兴趣的:(Oracle入门,oracle)