一.首先变量的声明有3中方式

1.按数据类型进行声明

①直接声明数据类型

②格式:变量名  数据类型(大小)

V_TEST varchar2(20);
V_NUM  number;

 注:存储过程中声明变量必须在begin之前

       并且声明字符串时必须指定大小,不然会报错

2.使用%TYPE声明

①格式:变量名  表名.字段名%TYPE

②含义:该变量的数据类型与指定表的指定字段的数据类型一致

V_NAME DFGZ_PKG.NAME%TYPE;

3.使用%ROWTYPE声明

①变量名  表名%ROWTYPE

②含义:该变量的数据类型与指定表的指定行记录(所有字段)的数据类型一致

--V_TOTALL_ROW 表的整行数据
V_TYPE_TOTALL_ROW  V_TOTALL_ROW%ROWTYPE;

总结:

       ①在Oracle的存储过程中变量的声明不区分大小写

       ②变量的使用必须声明

二.变量的赋值(3种方式)

1.直接赋值法

①使用 “:=”

②使用条件:适用于声明变量的前两种方式

V_COLUMN :='100';

③变量后面不能直接跟sql语句,负责sql不会执行,如

--错误做法
V_LOGO :=SELECT REVC_SIGN INTO V_LOGO FROM DFGZ_PKG;

--正确做法
V_LOGO :=‘SELECT REVC_SIGN INTO V_LOGO FROM DFGZ_PKG’;

④变量的声明和赋值可以一块进行

create....

--开始给变量赋值
V_sql :='select reve_state from dfgz_pkg where fileNum=5';

begin

/*
  具体业务部分
 */

end;

2.select 表字段 into 变量 from  表

方式一:

①查询指定表的所有字段

②适用于声明变量的前2种方式可以使用

--根据代发工资个人id查询对应的父机构(代发单位)序列
SELECT REVC_SIGN INTO V_LOGO FROM DFGZ_PKG 
 
 WHERE REVCID=(SELECT PARENTID FROM DFGZ_PKG WHERE REVEID = V_REVCID);

方式二:

①查询指定表的所有字段

②适用于声明变量的第3种方式

--将id=2203的DFGZ_PKGMX表数据赋值给变量V_COLUMN_SID;

SELECT * INTO  V_COLUMN_SID FROM DFGZ_PKGMX T WHERE t.id=2203

注:

①查询结果只能返回一条记录

②查询的表字段必须是该表的所有字段

--错误示例一:查询的是所有记录

select * into V_COLUMN_SID  from DFGZ_PKGMX T;
--错误示例二:查询的是该表的多个字段

select  t.id,t.name into V_COLUMN_SID  from dfgz_pkgmx t;

3.execute immediate sql语句字符串 into 变量

declare /*存储过程,不需要声明*/

   v_sql varchar2(200);

   v_revc_row varchar2(200);

begin

    v_sql:='select v_revc_row  from dfgz_send where revc_id=22150';

    --v_revc_row 赋值

    execute immediate v_sql into v_v_revc_row ;

     --打印结果(Oracle自带日志打印功能)

     DBMS_OUTPUT.put_line(v_revc_row  );

end;

三.变量的调用

1.通常来说,变量只有这3种使用场景:赋值、逻辑判断、算术运算

2.平常不能用作查询列

--错误调用

select v_reve_sign from dual;

3.使用%ROWTYPE声明的变量如何调用?

  利用“变量名.表字段”的方式可以取到该表中指定行(返回行)的指定列(任意列)所代表的数据。 

--  v_revc_row  赋值

select v_revc_row  from dfgz_send where revc_id=22150;

-- 调用

DBMS_OUTPUT.put_line(dfgz_send.id);

 

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐