SQL> conn/as sysdba //sys权限
SQL> select username, account_status from dba_users order by username; //查看账户状态,是否锁定?
第一集:Introduction to PL/SQL
Block 的基本结构: DECLARE(optional) - Variables, cursors, user-defined, exceptions
BEGIN(mandatory) - SQL statements
- PL/SQL statements
EXCEPTION(optional) - Actions to perform when errors occru
END(mandatory); //有分号
Block Types: Anonymous(匿名的,不是存储在数据库里,只能使用一次。), Procedure(过程的), Function(必须返回值)
匿名块的执行过程:
SQL> declare
2 v_fname varchar2(20); //定义一个变量 v_fname
3 begin
4 select first_name into v_fname from employees where employee_id = 100;
5 end;
6 / //结束
SQL> help set //查看帮助
SQL> set serveroutput on //将服务器输出端打开
SQL> declare
2 v_fname varchar2(20);
3 begin
4 select first_name into v_fname from employees where employee_id = 100;
5 dbms_output.put_line('The result is ' || v_fname); //输出结果, ||连接字符串
6 end;
7 /
第二集:Declaring PL/SQL Variables
A variable name:(大小写不敏感)
1, Must start with a letter
2, Can include letters or numbers
3, Can include special charaacters(such as $,_,and #) //#和$尽量不用
4, Must contain no more than 30 characters
5, Must not include reserved words
Syntax:
identifier [CONSTANT] datatype [NOT NULL]
[:= | DEFAULT expr];
SQL> declare
2 v_myName varchar(20);
3 begin
4 dbms_output.put_line('My name is: '|| v_myName);
5 v_myName := 'John';
6 Dbms_output.put_line('My name is: '|| v_myName);
7 end;
8 /
My name is:
My name is: John
PL/SQL 过程已成功完成。
SQL> declare
2 v_myName varchar2(20) := 'John'; //初始化,如果有限制not null则必须进行初始化
3 begin
4 dbms_output.put_line('My name is: '|| v_myname); //变量名大小写不敏感
5 end;
6 /
My name is: John
分隔符:
SQL> declare
2 v_event varchar2(15);
3 begin
4 v_event := q'!Father's day!'; //如果字符串里有 ’ 则要使用分隔符。 不要忘了q 分隔符可以自己任意取。(这里是!)
5 dbms_output.put_line('3re Sunsday in June is :'||v_event);
6 v_event := q'[Mother's day]'; //这里是[].
7 dbms_output.put_line('2nd Sunday in May is :'||v_event);
8 end;
9 /
3re Sunday in June is :Father's day
2nd Sunday in May is :Mother's day
PL/SQL 过程已成功完成。
修改成如下程序的过程:
4 //定位到第四行
c/q'!/"
c/'/'' //两个单引号
c/"/'
c/!'/'
l
/
SQL> declare
2 v_event varchar2(15);
3 begin
4 v_event := 'Father''s day'; //另一种分隔符的方法,但不常见
5 dbms_output.put_line('3re Sunday in June is :'||v_event);
6 v_event := q'[Mother's day]';
7 dbms_output.put_line('2nd Sunday in May is :'||v_event);
8 end;
9 /
Types of Variables
-Scalar 标量
-Composite 复合型
-Reference 引用
-Large object(LOB)
Non-PL/SQL variables:Bind variables
Scalar Data Types: 1, Hold a single value. 2, Have no internal components
%Type Attribute(oracle 独有):让变量绑定某一列或另一个变量的类型,这样如果类型改变,这个变量也跟着改变了,不需要另外修改
Declaring Boolean Variables:(true, false, null)
Bind Variables(外部变量,环境变量(c, c++, java),不是oracle内部的)。
绑定变量的例子:
SQL> variable b_salary number; //定义引用参数
SQL> begin
2 select salary into :b_salary from employees where employee_id = 178; //必须加:而且不能有空格
3 end;
4 /
PL/SQL 过程已成功完成。
SQL> print b_salary; //打印变量,这里就不需:了,也可以不用分号
B_SALARY
----------
7000
SQL> select first_name, last_name from employees where salary =:b_salary; //变量是存储在环境里的,在别的表里也可以引用
FIRST_NAME LAST_NAME
-------------------- -------------------------
Oliver Tuvault
Sarath Sewall
Kimberely Grant
SQL> variable b_emp_salary number
SQL> set autoprint on //自动输出
SQL> declare
2 v_empno number(6) := &empno; //引用变量
3 begin
4 select salary into :b_emp_salary
5 from employees where employee_id = v_empno;
6 end;
7 /
输入 empno 的值: 178
原值 2: v_empno number(6) := &empno;
新值 2: v_empno number(6) := 178;
PL/SQL 过程已成功完成。
B_EMP_SALARY
------------
7000
CLOB: 字符串
BLOB: 二进制 (图片或视频)数据是存储在数据库里的
BFIE: 和BLOB的区别( 数据是存储在系统上的,只在数据库里留一个指针)
NCLOB: 存放一些非英文字母的,如韩国语言
第四集:
//BEGIN <<outer>> //打标签
SQL> DECLARE
2 v_father_name VARCHAR2(20):='Father';
3 v_date_of_birth DATE:='1-11月-1972';
4 BEGIN
5 DECLARE
6 v_child_name VARCHAR2(20):='Child';
7 v_date_of_birth DATE:='28-2月-1991'; //变量名和外层的变量名相同
8 BEGIN
9 DBMS_OUTPUT.PUT_LINE('Father''s Name: '||v_father_name);
10 DBMS_OUTPUT.PUT_LINE('Date of Birth: '||v_date_of_birth); //和外层相同变量名优先使用内层的,如果要使用外层的则用:out.v_date_of_birth指明使用外部的变量并去掉头尾的注释。
11 DBMS_OUTPUT.PUT_LINE('Child''s Name: '||v_child_name);
12 END;
13 DBMS_OUTPUT.PUT_LINE('Date of Birth: '||v_date_of_birth); //输出外层的
14 END;
//END outer;
15 /
输出如下:
Father's Name: Father
Date of Birth: 28-2月 -91
Child's Name: Child
Date of Birth: 01-11月-72
PL/SQL 过程已成功完成。