Oracle 相关基础1-变量


PL/SQL表示SQL的过程式语言扩展(Procedural Language Extension to SQL)。
通过添加任何高级语言所拥有的编程结构和子程序, PL/SQL实现了对SQL的扩展
PL/SQL可用于服务器端(Oracle数据库)和客户端(Oracle Forms等)开发
PL/SQL不是独立的编程语言,它是Oracle RDBMS的一部分

c/s c:客户端 s:服务器端
b/s b:浏览器 s:服务器端

语法:
declare — 这一部分可以省略,如果没有变量的情况下,可以不写
— 声明部分:
普通变量(v_) 变量类型: number varchar2 char date …. ();
–声明时可以不给值,也可以给值,也可以在执行体里可以修改
常量(c_) constant 值;
— 常量一但声明,不能更改 ,也就是在执行体里不能重新变更值
— 给变量赋值 := ; 不能用 = 号
begin
— 执行部分
select ename from emp ;
— 条件判断
— 循环语句
exception
— 异常部分
end;

begin
null ; — 什么也不执行,相当于一个占位符
end ;
— 打印输出
begin
dbms_output.put_line(‘A’) ; — 执行块
end ;
— put_line 和 put 的区别
begin
dbms_output.put(‘A’); — 执行块
dbms_output.put(‘B’); — 执行块
dbms_output.put(‘C’); — 执行块
dbms_output.put(‘D’); — 执行块
dbms_output.put(‘E’); — 执行块
dbms_output.put_line(”);
end ;

— 普通声明变量
declare
v_ename1 varchar2(30); –不赋值
v_ename2 varchar2(30) := ‘aaa’; — 赋值
begin
dbms_output.put_line(v_ename1);
dbms_output.put_line(v_ename2);
end ;

— 普通声明变量 执行块中修改值
declare
v_ename1 varchar2(30); –不赋值
v_ename2 varchar2(30) := ‘aaa’; — 赋值
v_empno number;
begin
v_ename1 := ‘sql哥’;
v_ename2 := ‘爽哥’;
v_empno := 123;
dbms_output.put_line(v_ename1);
dbms_output.put_line(v_ename2);
dbms_output.put_line(v_empno);
end ;

— 普通声明变量 执行块中修改值
declare
v_ename1 varchar2(30); –不赋值
v_ename2 varchar2(30) := ‘aaa’; — 赋值
v_empno number;
begin
v_ename1 := ‘sql哥’;
v_ename2 := ‘爽哥’;
v_empno := 123;
dbms_output.put_line(v_ename1 || ‘ ‘ || v_ename2 || ‘ ‘ || v_empno);
end ;

— 声明常量,必须要给初始值: constant 常量
declare
v_empno number := 123;
c_pi constant number:= 3.1415926;
begin
dbms_output.put_line(v_empno);
dbms_output.put_line(c_pi);
end ;

— 修改常量: constant 常量
declare
v_empno number := 123;
c_pi constant number:= 3.1415926;
c_pi_1 constant number; –报错 常数 ‘C_PI_1’ 的声明必须包含初始赋值
begin
v_empno := 2222;
c_pi := 3.14; — 报错 表达式 ‘C_PI’ 不能用作赋值目标
dbms_output.put_line(v_empno);
dbms_output.put_line(c_pi);
dbms_output.put_line(c_pi_1);
end ;

— %type:  从某一张表中获取表中某一个字段类型
语法:
   declare
      变量 表.字段%type ;
   begin
   end ;

— 例1.从emp表中获取ename字段类型
declare
  a varchar2(30) ;
  — b varchar2(30);
  b emp.ename%type ;  — 自动接收表中的字段类型及长度
begin
  dbms_output.put_line(a || b);
end ;

— 例2.从emp表中获取ename字段类型,并赋值
declare
  a varchar2(30) := ‘abc’;
  b emp.ename%type := ‘SMITH’ ;
begin
  dbms_output.put_line( a || b );    
end ;

— 例3.从emp表中获取字段类型
declare
   v_ename emp.ename%type := ‘SMITH’;
   v_empno emp.empno%type := 7400;
begin
  dbms_output.put_line(v_ename || v_empno);
end ;

— 记录类型(复合类型)
语法:
— 将单个变量进行一个封装
   declare
     — 当前只是声明了一个记录类型
     type 类型名 is record(
       变量1 类型 ,
       变量2 表.字段%type ,
       变量3 类型 ,
       变量4 表.字段%type
     );
     
    — 必须要声明一个变量,来接收记录类型
    变量 类型名;
   begin
     
   end ;

— 例1.声明一个记录类型,并使用
declare
type rec_1 is record(
   v1 varchar2(30) := ‘a’,
   v2 emp.ename%type ,
   v3 number ,
   v4 emp.empno%type
);
v_emp rec_1;

begin
  dbms_output.put_line(v_emp.v1);      
end ;

— %rowtype 类型(可以获取一张表中所有字段类型)
语法:
  declare
    变量 emp%rowtype ;
  begin
    使用变量类型:
    变量.字段
  end ;

— 例1. 通过 %rowtype 获取emp表中所有字段类型
declare
  v_emp emp%rowtype ;
begin
  v_emp.empno := 1234;
  v_emp.ename := ‘simth’;
  dbms_output.put_line(v_emp.empno || v_emp.ename);
end ;

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/278999.html

(0)
上一篇 2022年8月5日
下一篇 2022年8月5日

相关推荐

发表回复

登录后才能评论