一:变量作用域
DECLARE
current_block VARCHAR2(10) := 'Outer';
outer_block VARCHAR2(10) := 'Outer';
BEGIN
dbms_output.put_line('[current_block]['||current_block||']');
DECLARE
current_block VARCHAR2(10) := 'Inner';
BEGIN
dbms_output.put_line('[current_block]['||current_block||']');
dbms_output.put_line('[outer_block]['||outer_block||']');
END;
dbms_output.put_line('[current_block]['||current_block||']');
END;
以上为引用一本书的代码(Oracle Database 11g PL/SQL程序设计) 输出为
[current_block][Outer]
[current_block][Inner]
[outer_block][Outer]
[current_block][Outer]
这是两个嵌套的程序块 我们在子程序块中重定义了父程序块的变量 这个变量在子程序块执行完之后又恢复了父程序块中定义的值 二:%type 取一个已知变量的数据类型
declare mytitle labor.xland.title%type;
begin
select title into mytitle from labor.xland where state = 0;
dbms_output.put_line(mytitle);
end;
上面例子中取了表title列的数据类型(varchar2) 然后检索了一行一列数据,把这个数据赋值给我们定义的变量mytitle 当然你也可以定义多个变量 如: select title,id into mytitle,myid from labor.xland where state = 0; 三:%rowtype 取一个已知行的数据类型,这应该是一个对象类型
declare
myrow labor.xland%rowtype;
begin
select * into myrow from labor.xland where state = 0;
dbms_output.put_line(myrow.title);
dbms_output.put_line(to_char(myrow.state));
end;
上例中我们取了某个表的rowtype,并定义了变量myrow 接着把这个表的一行数据赋值给了这个变量 输出的时候只要以点来获取这一行的某个列即可 四:record 这应该也是一个对象
declare
type myrecordtype is record
(
mytitle labor.xland.title%type,
mystate labor.xland.state%type
);
myrecord myrecordtype;
begin
select title, state into myrecord from labor.xland;
dbms_output.put_line(myrecord.mytitle);
dbms_output.put_line(to_char(myrecord.mystate));
end;
如上代码 我们先定义了一种数据类型(type) 这种类型包含两个属性,分别是mytitle和mystate 然后我们定义了一个变量myrecord 这个变量的类型就是我们刚才定义的数据类型 接着我们把两个数据赋值给类这个变量的两个属性 这里的赋值顺序是按属性定义的先后顺序给属性赋值的 然后输出 至此,数据类型仍未讲完 还有table(表),array(数组),exception(异常),cursor(游标)等类型等没讲 异常和游标将在后面的文章提到