您的位置:首页 > 数据库

PL/SQL变量的使用

2017-07-11 00:00 169 查看
1.变量声明语法结构

variable_name datatype         -- 变量名   类型
[
[NOT NULL]                   -- 非空约束
{:= | DEFAULT} expression    -- 当使用NOT NULL属性时,大括号必填,二选一
-- ':=' 表示赋值; DEFAULT表示默认值
-- expression 表示变量存储的值,可以是表达式
];

2.常量声明语法结构

constant_name  CONSTANT  datatype
[NOT NULL]
{:= | DEFAULT} expression;

3.%TYPE 和 %ROWTYPE 引用已存在的类型

4.记录类型

TYPE  type_name  IS  RECORD
(
field_name datatype
[
[NOT NULL]
{:= | DEFAULT} expression
]
[,field_name datatype [[NOT NULL]{:= | DEFAULT} expression]]...
) ;


普通的变量声明

DECLARE
v_produtcid     productinfo.productid%TYPE;           --产品id
v_productname   VARCHAR2(20);                         --产品名称
v_productprice  NUMBER(8,2);                          --产品价格
v_quantity      NUMBER(10);                           --数量
v_desperation   CONSTANT v_productname%TYPE:='测试';   --测试

v_date        DATE := SYSDATE;

BEGIN
SELECT productid,productname,productprice,quantity
INTO v_productid,v_productname,v_productprice,v_quantity
FROM productinfo
WHERE produtid = '001';

DBMS_OUTPUT.PUT_LINE('v_produtid = ' || v_produtid);

END;


记录类型变量

DECLARE
TYPE product_res IS RECORD
(
v_productid     productinfo.productid%TYPE;           --产品id
v_productname   VARCHAR2(20);                         --产品名称
v_productprice  NUMBER(8,2);                          --产品价格
);

v_product  product_res;                                  --记录类型变量
BEGIN
SELECT productid,productname,productprice
INTO v_product
FROM productinfo
WHERE produtid = '001';

DBMS_OUTPUT.PUT_LINE('v_produtid = ' || v_product.v_produtid);

END;


%ROWTYPE

DECLARE
v_product productinfo%ROWTYPE;                        --记录类型变量

BEGIN
SELECT * INTO v_product
FROM productinfo
WHERE produtid = '001';

DBMS_OUTPUT.PUT_LINE('v_produtid = ' || v_product.v_produtid);

END;


PL/SQL索引表类型(关联数组)

TYPE type_name IS TABLE OF
{
column_type|
variable_name%TYPE |
table_name.column_name%TYPE |
table_name%ROWTYPE
}
[NOT NULL]
INDEX BY {PLS_INTEGER|BINARY_INTEGER|VARCHAR2(v_size)}

DECLARE
TYPE prodt_tab_fst IS TABLE OF productinfo%ROWTYPE  --%ROWTYPE
INDEX BY BINARY_INTEGER;                            --BINARY_INTEGER

TYPE prodt_tab_sec IS TABLE OF VARCHAR2(8)
INDEX BY PLS_INTEGER;                               --PLS_INTEGER

v_prt_row prodt_tab_fst;
v_prt prodt_tab_sec;

BEGIN
v_prt(1) := '正数';
v_prt(-1) := '负数';

SELECT * INTO v_prt_row(1)
FROM productinfo
WHERE productid = '024004001';

DBMS_OUTPUT.PUT_LINE('行数据v_prt_row(1) = ' || v_prt_row(1).productid);
DBMS_OUTPUT.PUT_LINE('v_prt(1) = ' || v_prt(1));

END;


VARRAY变长数组

TYPE type_name IS {VARAY|VARYING ARRAY}(size_limit)
OF element_type [NOT NULL]

DECLARE
TYPE varr IS VARRAY(100) OF VARCHAR2(20);

v_product varr:=varr('1','2');

BEGIN
v_product(1):='THIS IS A';
v_product(2):='TEST';
DBMS_OUTPUT.PUTLINE('productid = ' || v_product(1));

END;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  PL/SQL 变量