oracle笔记pl_sql基本语法记录类型01

/*

pl/sql
基本语法
记录类型

*/

/*
1.pl/sql基本的语法格式

2.记录类型 type ... is record(,,,);

3.流程控制
 3.1条件判断(两种)
 方式1:if ... then elsif then ... else ... end if;
 方式2:case ... when ... then ... end;
 
 3.2循环结构(三种)
  方式1:loop ... exit when ... end loop;
  方式2:while ... loop ... end loop;
  方式3:for i in ... loop ... end loop;
  
 3.3 goto 、exit
     

4.游标的使用(类似于java中的Iterator)

5.异常的处理(三种方式)

6.会写一个存储函数(有返回值)、存储过程(没有返回值)

7.会写一个触发器


*/

--
set serveroutput on

--
--DECLARE
   --声明的变量、类型、游标
BEGIN
   --程序的执行部分(类似于java中的main()方法)
dbms_output.put_line('hello world!');
--EXCEPTION
   --针对begin块中出现的异常,提供处理的机制
   --when .... then ...
  --when  .... then ...                       
END;


--最简单的pl/sql语句块
BEGIN
dbms_output.put_line('hello world!');  
END;


--
DECLARE
   --声明变量
   v_sal NUMBER(10, 2);
BEGIN
   --sql语句的操作:select ... into ... from ... where ...
   SELECT salary INTO v_sal FROM employees WHERE employee_id = 100;
   --打印
   dbms_output.put_line(v_sal);  
END;

--
DECLARE
   --声明变量
   v_sal NUMBER(10, 2);
   v_email varchar2(40);
   v_hire_date DATE;
BEGIN
   --sql语句的操作:select ... into ... from ... where ...
   SELECT salary, email, hire_date INTO v_sal, v_email, v_hire_date FROM employees WHERE employee_id = 100;
   --打印
   dbms_output.put_line(v_sal);
   dbms_output.put_line(v_email); 
   dbms_output.put_line(v_hire_date); 
   dbms_output.put_line(v_sal || ',' || v_email || ',' || v_hire_date); 
END;

--
DECLARE
   --声明变量
   v_sal NUMBER(10, 2);
   v_email varchar2(40);
   v_hire_date varchar2(40);
BEGIN
   --sql语句的操作:select ... into ... from ... where ...
   SELECT salary, email, to_char(hire_date, 'yyyy-mm-dd') INTO v_sal, v_email, v_hire_date FROM employees WHERE employee_id = 100;
   --打印
   dbms_output.put_line(v_sal);
   dbms_output.put_line(v_email); 
   dbms_output.put_line(v_hire_date); 
   dbms_output.put_line(v_sal || ',' || v_email || ',' || v_hire_date); 
END;


--
DECLARE
   --声明变量
   v_sal employees.salary%TYPE; -- 动态获取employees表中的salary列的数据类型
   v_email employees.email%TYPE; 
   v_hire_date employees.hire_date%TYPE;
BEGIN
   --sql语句的操作:select ... into ... from ... where ...
   SELECT salary, email, hire_date INTO v_sal, v_email, v_hire_date FROM employees WHERE employee_id = 100;
   --打印
   dbms_output.put_line(v_sal);
   dbms_output.put_line(v_email); 
   dbms_output.put_line(to_char(v_hire_date, 'yyyy-mm-dd')); 
   dbms_output.put_line(v_sal || ',' || v_email || ',' || to_char(v_hire_date, 'yyyy-mm-dd')); 
END;

--

--使用记录类型
DECLARE
   --声明一个记录类型
   TYPE emp_record IS RECORD(
   v_sal employees.salary%TYPE, -- 动态获取employees表中的salary列的数据类型
   v_email employees.email%TYPE, 
   v_hire_date employees.hire_date%TYPE
   );
   --定义一个记录类型的成员变量
   v_emp_record emp_record;
BEGIN
   --sql语句的操作:select ... into ... from ... where ...
   SELECT salary, email, hire_date INTO v_emp_record FROM employees WHERE employee_id = 100;
   --打印
   dbms_output.put_line(v_emp_record.v_sal);
   dbms_output.put_line(v_emp_record.v_email); 
   dbms_output.put_line(to_char(v_emp_record.v_hire_date, 'yyyy-mm-dd')); 
   dbms_output.put_line(v_emp_record.v_sal || ',' || v_emp_record.v_email || ',' || to_char(v_emp_record.v_hire_date, 'yyyy-mm-dd')); 
END;

--
DECLARE
--v_salary VARCHAR2(20); --这样写也正确
--v_salary employees.salary%TYPE; -- 动态获取employees表中的salary列的数据类型
v_salary NUMBER(10, 2);
BEGIN
  SELECT salary INTO v_salary FROM employees WHERE employee_id = 100;
  --打印
   dbms_output.put_line(v_salary);
END;

--

DECLARE
--v_salary VARCHAR2(20); --这样写也正确
--v_salary employees.salary%TYPE; -- 动态获取employees表中的salary列的数据类型
v_salary NUMBER(10, 2) := 666.88; -- :=符号表示赋值
BEGIN
  --SELECT salary INTO v_salary FROM employees WHERE employee_id = 999; --没有编号为999的员工,查不到该员工
  --打印
   dbms_output.put_line(v_salary);
END;


--
DECLARE 
--变量、记录类型等的声明
--定义一个变量
v_salary NUMBER(8, 2) := 0.00; -- :=符号表示赋值
BEGIN
  --程序的执行部分
  SELECT salary INTO v_salary FROM employees WHERE employee_id = 123;
  dbms_output.put_line('薪水为' || v_salary);
  --EXCEPTION
    --异常的处理    
END;


--
DECLARE 
--变量、记录类型等的声明
--定义一个变量
v_salary NUMBER(8, 2) := 0.00; -- :=符号表示赋值
v_lastname VARCHAR2(40); --也可以不赋值
v_email VARCHAR2(40) := 'test@163.com'; 
v_hiredate DATE := SYSDATE;
BEGIN
  --程序的执行部分
  SELECT salary, last_name, email, hire_date 
  INTO v_salary, v_lastname, v_email, v_hiredate 
  FROM employees WHERE employee_id = 123;
  dbms_output.put_line('姓名为' || v_lastname || ' 薪水为' || v_salary || ' 邮箱为' || v_email || ' 入职日期为' || v_hiredate);
  --EXCEPTION
    --异常的处理    
END;


--
DECLARE 
--变量、记录类型等的声明
--声明一个记录类型
TYPE emp_record IS record(
v_salary NUMBER(8, 2) := 0.00, -- :=符号表示赋值
v_lastname VARCHAR2(40), --也可以不赋值
v_email VARCHAR2(40) := 'test@163.com',
v_hiredate DATE := SYSDATE
);
--声明一个记录类型的变量
v_emp_record emp_record;
BEGIN
  --程序的执行部分
  SELECT salary, last_name, email, hire_date 
  INTO v_emp_record 
  FROM employees WHERE employee_id = 123;
  dbms_output.put_line('姓名为' || v_emp_record.v_lastname || ' 薪水为' || v_emp_record.v_salary || ' 邮箱为' || v_emp_record.v_email || ' 入职日期为' || v_emp_record.v_hiredate);
  --EXCEPTION
    --异常的处理    
END;


--
DECLARE 
--变量、记录类型等的声明
--声明一个记录类型
TYPE emp_record IS record(
v_salary NUMBER(8, 2) := 0.00, -- :=符号表示赋值
v_lastname VARCHAR2(40), --也可以不赋值
v_email VARCHAR2(40) := 'test@163.com',
v_hiredate DATE := SYSDATE
);
--声明一个记录类型的变量
v_emp_record emp_record;
BEGIN
  --程序的执行部分
  dbms_output.put_line('姓名为' || v_emp_record.v_lastname || ' 薪水为' || v_emp_record.v_salary || ' 邮箱为' || v_emp_record.v_email || ' 入职日期为' || v_emp_record.v_hiredate);
  --EXCEPTION
    --异常的处理    
END;

--
DECLARE 
--变量、记录类型等的声明
--声明一个记录类型
TYPE emp_record IS record(
v_salary NUMBER(10, 2) := 0.68, -- :=符号表示赋值
v_lastname VARCHAR2(40), --也可以不赋值
v_email VARCHAR2(40) := 'test@163.com',
v_hiredate DATE := SYSDATE
);
--声明一个记录类型的变量
v_emp_record emp_record;
BEGIN
  --程序的执行部分
  dbms_output.put_line('姓名为' || v_emp_record.v_lastname || ' 薪水为' || v_emp_record.v_salary || ' 邮箱为' || v_emp_record.v_email || ' 入职日期为' || v_emp_record.v_hiredate);
  dbms_output.put_line('姓名为' || v_emp_record.v_lastname || '。');
  --将number数字类型转换成字符串类型
  dbms_output.put_line('第1种薪水为' || to_char(v_emp_record.v_salary, '999,999,999.999'));
  dbms_output.put_line('第2种薪水为' || to_char(v_emp_record.v_salary, '000,999,999.999'));
  dbms_output.put_line('第3种薪水为' || to_char(v_emp_record.v_salary, 'L000,999,999.999'));
  dbms_output.put_line('第4种薪水为' || to_char(v_emp_record.v_salary, '$999,999,999.999'));
  dbms_output.put_line('第5种薪水为' || to_char(v_emp_record.v_salary, '000,000,000.00'));
  dbms_output.put_line('第6种薪水为' || to_char(v_emp_record.v_salary, '$000,000,000.00'));
  dbms_output.put_line('第7种薪水为' || to_char(v_emp_record.v_salary, '$000000000.00'));
  dbms_output.put_line('第8种薪水为' || to_char(v_emp_record.v_salary, '000000000.00'));
  dbms_output.put_line('第9种薪水为' || to_char(v_emp_record.v_salary, '00.00'));
  dbms_output.put_line('第10种薪水为' || to_char(v_emp_record.v_salary, '0.00'));
  --EXCEPTION
    --异常的处理    
END;


--简单版
DECLARE
TYPE salary_record IS RECORD (
v_salary NUMBER(8, 2),
v_name varchar2(30)
);
v_salary_record salary_record;
BEGIN
 v_salary_record.v_salary := 68900;
 v_salary_record.v_name := '令狐冲';
dbms_output.put_line('姓名为' || v_salary_record.v_name || ' 薪水为' || v_salary_record.v_salary); 
END; 


--使用%ROWTYPE关键字
DECLARE 
--定义一个记录类型
v_emp_record employees%ROWTYPE; --%ROWTYPE表示和employees表中的所有列的结构一样
BEGIN
  --程序的执行部分
  SELECT *  
  INTO v_emp_record 
  FROM employees WHERE employee_id = 123;
  dbms_output.put_line('姓名为' || v_emp_record.last_name || ' 薪水为' || v_emp_record.salary || ' 邮箱为' || v_emp_record.email || ' 入职日期为' || v_emp_record.hire_date);
  dbms_output.put_line('部门编号为' || v_emp_record.department_id);
  --EXCEPTION
    --异常的处理    
END;


--使用变量
DECLARE 
v_emp_record employees%ROWTYPE; --%ROWTYPE表示和employees表中的所有列的结构一样
v_emp_id NUMBER(10);
BEGIN
  v_emp_id := 100; --给v_emp_id变量赋值(为变量赋值,赋值符号使用:=)
  --程序的执行部分
  SELECT *  
  INTO v_emp_record 
  FROM employees WHERE employee_id = v_emp_id; -- 使用v_emp_id变量
  dbms_output.put_line('姓名为' || v_emp_record.last_name || ' 薪水为' || v_emp_record.salary || ' 邮箱为' || v_emp_record.email || ' 入职日期为' || v_emp_record.hire_date);
  dbms_output.put_line('部门编号为' || v_emp_record.department_id);
  --EXCEPTION
    --异常的处理    
END;

--
SELECT salary, employees.* FROM employees WHERE employee_id = 100;

--
DECLARE
v_emp_id NUMBER(10);
BEGIN
  v_emp_id := 100;
  --做更新操作
  UPDATE employees
  SET salary = salary + 500
  WHERE employee_id = v_emp_id;
  dbms_output.put_line('执行成功');
END;







/*
以下是以前的知识
*/
--
SELECT 5 + 5 AS MYRESULT,
       DEPARTMENT_ID,
       CASE DEPARTMENT_ID
         WHEN 80 THEN
          'true'
         ELSE
          'false'
       END
  FROM EMPLOYEES
 WHERE DEPARTMENT_ID IN (80, 90);
--
SELECT CASE 6 WHEN 6 THEN 'true' ELSE 'false' END FROM DUAL
 
--
SELECT 3 + 3 AS myresult, CASE 6 WHEN 6 THEN 'true' ELSE 'false' END FROM DUAL

--如下这种写法会报错,myresult标识符无效,只能在排序的时候使用别名
SELECT 3 + 3 AS myresult, CASE myresult WHEN 6 THEN 'true' ELSE 'false' END FROM DUAL

--排序的时候可以使用别名
SELECT salary sal FROM employees emp ORDER BY sal DESC

SELECT 0.6 FROM dual;

SELECT to_char(0.1,'fm9999990.9999') FROM dual; 

SELECT to_char(0.1,'9999990.9999') FROM dual; 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值