122.Oracle数据库SQL开发之 PLSQL编程——11g新增加的PLSQL特性
1. SIMPLE_INTEGER类型
欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/50087007
SIMPLE_INTEGER类型是BINARY_INTEGER的子类型,SIMPLE_INTEGER的存储范围与BINARY_INTEGER相同,但是SIMPLE_INTEGER不能存储NULL值。
当使用SIMPLE_INTEGER值时,算术溢出被截断,因此,当发生溢出时,计算不会产生错误。因为溢出错误被忽略,所以存储在SIMPLE_INTEGER中的值可以从正数循环为负数和从负数循环为正数。
如下:
CREATE PROCEDURE get_area
AS
v_width SIMPLE_INTEGER := 10;
v_heightSIMPLE_INTEGER := 2;
v_area SIMPLE_INTEGER := v_width * v_height;
BEGIN
DBMS_OUTPUT.PUT_LINE('v_area = ' || v_area);
END get_area;
/
调用如下:
store@PDB1>set serveroutput on
store@PDB1> call get_area();
v_area = 20
Call completed.
2. 支持在PL/SQL中使用序列
创建表:
CREATETABLE new_products (
product_id INTEGER CONSTRAINT new_products_pkPRIMARY KEY,
name VARCHAR2(30) NOT NULL,
price NUMBER(5, 2)
);
创建序列:
CREATE SEQUENCE s_product_id;
创建过程如下:
CREATE PROCEDURE add_new_products
AS
v_product_idBINARY_INTEGER;
BEGIN
-- usenextval to generate the initial sequence number
v_product_id:= s_product_id.nextval;
DBMS_OUTPUT.PUT_LINE('v_product_id = ' || v_product_id);
-- add a rowto new_products
INSERT INTOnew_products
VALUES(v_product_id, 'Plasma Physics book', 49.95);
DBMS_OUTPUT.PUT_LINE('s_product_id.currval = ' || s_product_id.currval);
-- usenextval to generate the next sequence number
v_product_id:= s_product_id.nextval;
DBMS_OUTPUT.PUT_LINE('v_product_id = ' || v_product_id);
-- addanother row to new_products
INSERT INTOnew_products
VALUES(v_product_id, 'Quantum Physics book', 69.95);
DBMS_OUTPUT.PUT_LINE('s_product_id.currval = ' || s_product_id.currval);
END add_new_products;
/
执行如下:
store@PDB1> set serveroutput on
store@PDB1> call add_new_products();
v_product_id = 1
s_product_id.currval = 1
v_product_id = 2
s_product_id.currval = 2
Call completed.
store@PDB1> select * from new_products;
PRODUCT_ID NAME PRICE
---------- ----------------------------------------
1 Plasma Physics book 49.95
2 Quantum Physics book 69.95
3. PL/SQL本地机器代码生成
每个PL/SQL程序单元都被编译成中间格式,即机器可读的代码。
每次代码运行时需要进行解释。使用PL/SQL本地编译,PL/SQL被转换成本地代码,并存储在共享库中。
本地代码的运行速度比中间代码的运行速度快得多,因为本地代码在运行之前不必进行解释。11g以前的某些数据库版本中,可以将PL/SQL代码编译成C代码,然后将C代码编译成机器代码,是一项艰苦而又使人困惑的工具。在11g中PL/SQL编译器能够直接生成本地机器代码。只有经验丰富的DBA才能设置数据库生成本地机器代码。