Oracle中存储过程中变量的声明与赋值
一.首先变量的声明有3中方式1.按数据类型进行声明①直接声明数据类型②格式:变量名 数据类型(大小)V_TEST varchar2(20);V_NUMnumber;注:存储过程中声明变量必须在begin之前并且声明字符串时必须指定大小,不然会报错2.使用%TYPE声明①格式:变量名 表名.字段名%TYPE②含义:该变量的数据类型与指定...
一.首先变量的声明有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);
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)