【SQL】Oracle的PL/SQL语法及其拓展数据类型总结

系统 1645 0

PL/SQL语法

PL/SQL程序由三部分组成,声明部分、执行部分、异常处理部分。

模板:

    DECLARE

	/*变量声明*/

BEGIN

	/*程序主体*/

EXCEPTION

	/*异常处理部分*/

END;
  

接收用户的输入信息

PL/SQL  块还可以接收用户的输入信息,例如:现在要求用户输入一个雇员编号,之后根据输入的内容进行查询,查询雇员的姓名。
用户的输入信息使用“&”完成。
范例:

    DECLARE

	t_eno NUMBER ;

	t_ename VARCHAR2(30) ; 

BEGIN

	--  输入的信息保存在 eno 里

	t_eno := &no;

	--  之后根据 eno 的值,对数据库进行查询操作

	SELECT ename INTO t_ename FROM emp WHERE empno=t_eno ; 

	DBMS_OUTPUT.put_line('编号为:'||t_eno||'雇员的姓名为:'||t_ename) ;

EXCEPTION

	WHEN no_data_found THEN DBMS_OUTPUT.put_line('没有此雇员') ; 

END ;
  

 

自定义数据类型之%type

 

定义一个变量,可以将其与表中某个列的数据类型一致。

如上例修改为以下也可运行。

 

    DECLARE

t_eno emp.empno%type ;

t_ename emp.ename%type; 

BEGIN

  --  输入的信息保存在 eno 里

  t_eno := &no;

  --  之后根据 eno 的值,对数据库进行查询操作

  SELECT ename INTO t_ename FROM emp WHERE empno=t_eno ; 

  DBMS_OUTPUT.put_line('编号为:'||t_eno||'雇员的姓名为:'||t_ename) ;

EXCEPTION

 	 WHEN no_data_found THEN DBMS_OUTPUT.put_line('没有此雇员') ; 

END ;
  
    DECLARE

t_eno emp.empno%type ;

t_ename emp.ename%type; 

BEGIN

  --  输入的信息保存在 eno 里

  t_eno := &no;

  --  之后根据 eno 的值,对数据库进行查询操作

  SELECT ename INTO t_ename FROM emp WHERE empno=t_eno ; 

  DBMS_OUTPUT.put_line('编号为:'||t_eno||'雇员的姓名为:'||t_ename) ;

EXCEPTION

 	 WHEN no_data_found THEN DBMS_OUTPUT.put_line('没有此雇员') ; 

END ;
  

 

复合数据类型之record


将一个或多个标量封装成一个对象,由单行多列的标量构成的复合结构,组成类似于一维数组。 
如下例查询表中两列将其放入记录类型并输出显示。

    DECLARE

	type rec_test1 is record(

	t_empno emp.empno%type,

	t_ename emp.ename%type

	); --定义一个record类型

	rt rec_test1;--使用你刚才定义的record类型,定义了一个变量rt.

BEGIN

	select empno,ename into rt.t_empno,rt.t_ename from emp where empno=1001;

	dbms_output.put_line('empno:'||rt.t_empno);

END ;
  

 

    DECLARE

  type rec_test1 is record(

  a1 number,

  a2 varchar2(10)

  );

  rt1 rec_test1;

  rt2 rec_test1;

BEGIN

  rt1.a1:=1;

  rt1.a2:='china';

  rt2.a1:=2;

  rt2.a2:='usa';

  dbms_output.put_line('rt1.a2:'||rt1.a2);

  dbms_output.put_line('rt2.a2:'||rt2.a2);

END ;
  

 

复合数据类型之%rowtype


%ROWTYPE可以说是record的升级简化版。 
区别在与前者结构为表结构,后者为自定义结构。
二者在使用上没有很大区别。前者方便,后者灵活。
在实际中根据情况来具体决定使用。

使用记录更新数据,如果用记录(RECORD)更新数据,那么只能使用记录成员;如果用%ROWTYPE更新数据,可以直接使用%ROWTYPE 。如:

    DECLARE

  vEmp emp%RowType;

Begin

  select * InTo vEmp from empa where empa.EMPNO = '7934';

  update  empa set ROW = vEmp where EMPNO ='1111'; 

  commit;

End; 
  


【注】在进行如上操作前,需要复制表emp到empa。
复制表的结构

    CREATE TABLE empa as SELECT * FROM emp WHERE 1=2;
  

复制表的数据

    INSERT INTO empa SELECT * FROM emp;
  

 

Oracle扩展数据类型小结

%type:可让变量的类型与指定表的某列保持一致;
t_empno 表名.列名%type;

%record:单行多列,类似于一位数组;
1.先创建类型 2.再创建该类型的变量
type XXX is record(
列1 数据类型(长度),列2 数据类型(长度)…
);
x XXX; --x是变量, XXX是它的类型
如何引用某列? x.列名 即可

%rowtype: 是%record的升级简化版,可让其与某张表的结构完全一致.

x 表名%rowtype; --x是变量名


 

【SQL】Oracle的PL/SQL语法及其拓展数据类型总结


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论