一、sql语句

由于PL/SQL执行采用早期绑定,即在编译阶段对变量进行绑定,识别程序中标识符的位置,检查用户权限、数据库对象等信息。因此在PL/SQL中只允许出现:
SELECT
DML(UPDATE、DELETE、INSERT)
事务控制语句(COMMIT、ROLLBACK、SAVEPOINT)

1.DML语句
PL/SQL中DML语句对标准SQL语句中的DML语句进行了扩展,允许使用变量。
在PL/SQL程序中,使用SELECT…INTO语句查询一个记录的信息。
基本语法为:
SELECT select_list_item INTO variable_list|record_variable
FROM table
WHERE condition;
(ps:SELECT…INTO语句只能查询一个记录的信息,如果没有查询到任何数据,会产生NO_DATA_FOUND异常;如果查询到多个记录,则会产生TOO_MANY_ROWS异常。)
还有,如果要查询当前DML语句操作的记录的信息,可以在DML语句末尾使用RETURNING语句返回该记录的信息。就能看到操作记录信息啦 ヾ(≧∇≦*)ゝ

2.字符串间的比较
分为两种:
填充比较:通过在短字符串后添加空格,使两个字符串达到相同长度,然后根据每个字符的ASCII码进行比较。
非填充比较:根据每个字符的ASCII码进行比较,最先结束的字符串为小。怎么更好的区分的两者呢?(。•ˇ‸ˇ•。)
运行以下代码:

DECLARE
v_ename CHAR(10):='TURNER';
--v_ename VARCHAR2(20);
--v_ename emp.ename%TYPE:='TURNER';
v_sal emp.sal%TYPE;
BEGIN
SELECT sal INTO v_sal FROM emp WHERE ename=v_ename;
dbms_output.put_line(v_sal);
END;
看着是不是很完美

但其实系统会报错......产生错误的原因是VARCHAR2(10)类型与CHAR(10)类型比较时采用非填充比较,因此无法查询到员工名为“TURNER”的员工。可以将v_ename变量类型修改为VARCHAR2(10)类型,也可以直接采用emp.ename%TYPE方式定义。

二、选择和循环结构

1.选择结构
(a)if语句语法:IF condition1 THEN statements1;
[ELSIF condition2 THEN statements2;]
……
[ELSE else_statements];
END IF;
注意:条件是一个布尔型变量或表达式,取值只能是TRUE,FALSE,NULL。
由于PL/SQL中的逻辑运算结果有TRUE,FALSE和NULL三种,因此在进行选择条件判断时,要考虑条件为NULL的情况。为了避免条件为NULL时出现歧义,应该在程序中使用关键字unkow进行条件是否为NULL的检查。
(b)case语句,和之前学的c语言中的用法相同。

2.循环结构
(a)简单循环
注意:在循环体中一定要包含EXIT语句,否则程序进入死循环
(b)while循环
语法:WHILE condition LOOP
sequence_of_statement;
END LOOP;
(c)for循环

注意:
循环变量不需要显式定义,系统隐含地将它声明为BINARY_INTEGER变量;
系统默认时,循环变量从下界往上界递增计数,如果使用REVERSE关键字,则表示循环变量从上界向下界递减计数;
循环变量只能在循环体中使用,不能在循环体外使用。
记得双击,么么哒~

Last modification:October 27th, 2019 at 03:27 pm
如果觉得我的文章对你有用,请随意赞赏