1.格式
- --1.程序块结构
- declare
- --申明部分
- begin
- --执行部分
- end;
2.写一个空的程序块
- --1.程序块结构
- declare
- --申明部分
- begin
- --执行部分
- null;
- end;
在控制台输出【hello world】
- --2.简单的程序输入
- DECLARE
- --申明部分
- BEGIN
- --执行部分
- dbms_output.put_line('hello world');
- END;
3.定义变量 变量赋值 变量是可变的
- --已知长度求周长
- DECLARE
- --申明部分
- v_long number;
- v_wide number;
- v_perimeter number;
- BEGIN
- --执行部分
- v_long:=5;
- v_wide:4;
- v_perimeter:=(v_long*v_wide)*2
-
- --输出到控制台
- dbms_output.put_line('v_perimeter =' || v_perimeter);
- END;
-
- --申明变量的时候可以直接赋值,赋初始值
- DECLARE
- --申明部分
- v_long number:=5;
- v_wide number:4;
- v_perimeter number;
- BEGIN
- --执行部分
- v_perimeter:=(v_long*v_wide)*2
- --输出到控制台
- dbms_output.put_line('v_perimeter =' || v_perimeter);
- END;
变量是可变的
- DECLARE
- --申明部分
- v_long number :=5;
- v_wide number:4;
- v_perimeter number;
- BEGIN
- --执行部分
- v_long:=8;--改变v_long的值
- dbms_output.put_line('v_long =' || v_long);--输出v_long的值
- v_perimeter:=(v_long*v_wide)*2
- --输出到控制台
- dbms_output.put_line('v_perimeter =' || v_perimeter);--||是拼接的意思
- END;
4.定义常量constant 常量赋值 常量是不可变的,必须赋初始值
- --4定义常量constant 常量赋值 常量是不可变的,必须赋初始值
- --已知半径求直径
- declare
- v_pi constant number:=3.14;
- v_r number :=3;
- v_area number;
- BEGIN
- --执行部分
- v_area:=v_pi*v_r*v_r;
- dbms_output.put_line('v_area =' || v_area);--||是拼接的意思
- END;
5.字符/日期数据类型的变量
- declare
- --申明部分
- v_name VARIANCE2(30):='lisi';
- v_date date:=sysdate;
- begin
- --执行部分
- v_date:=to_date('20240422','yyyymmdd')
- dbms_output.put_line('v_date =' || v_date);--||是拼接的意思
- dbms_output.put_line('v_name =' || v_name);--||是拼接的意思
-
- end;
6.隐式游标及其特性--只能返回一行数据,返回多行数据或者没有数据返回会报错
语法:select into(表里面的某个字段的某个值放到变量里)
- --隐式游标及其特性--只能返回一行数据,返回多行数据或者没有数据返回会报错
- --语法 select INTO(不能直接执行select into)
- declare
- --申明部分
- v_name varchar2(30);
- v_sal number;
- BEGIN
- --执行部分
- select ename,sal into v_name,v_sal from emp where emp=100;
- dbms_output.put_line('v_name =' || v_name);
- dbms_output.put_line('v_sal =' || v_sal);
- dbms_output.put_line('姓名:' || v_name|| v_sal);
- END;
-
- --特性1.:返回多行数据会报错
- declare
- --申明部分
- v_name varchar2(30);
- v_sal number;
- BEGIN
- --执行部分
- select ename,sal into v_name,v_sal from emp ;
- dbms_output.put_line('姓名:' || v_name|| v_sal);
- END;
-
-
- --特性2:没有数据返回会报错
- declare
- --申明部分
- v_name varchar2(30);
- v_sal number;
- BEGIN
- --执行部分
- select ename,sal into v_name,v_sal from emp where v_name='o' ;
- dbms_output.put_line('姓名:' || v_name|| v_sal);
- END;
-
- --防止报错---加聚合函数
- declare
- --申明部分
- v_name varchar2(30);
- v_sal number;
- BEGIN
- --执行部分
- select max(ename),max(sal) into v_name,v_sal from emp ;
- dbms_output.put_line('姓名:' || v_name|| v_sal);
- END;
7.%type / %rowtype 定义数据类型
- 7.%type / %rowtype 定义数据类型
- --%type:引用数据库中的某一列的数据类型或者某一个变量的数据类型
- declare
- --申明部分
- v_name emp.ename%type;
- BEGIN
- --执行部分
- select ename into v_name from emp where emp=100;
- dbms_output.put_line('v_name =' || v_name);
- END;
-
- --%rowtype:引用数据库中的一行(所有字段)作为数据类型
- declare
- --申明部分
- v_all emp%rowtype;
- BEGIN
- --执行部分
- select ename into v_all.ename,v_all.sal from emp where emp=100;
- dbms_output.put_line(v_all.ename|| v_all.sal );
- END;