求助,ORACLE PL/SQL 万思不得其解的问题
先贴上代码:
declare type nestable_type_varchar2 is table of varchar2(10); nestable_varchar2 nestable_type_varchar2 := nestable_type_varchar2(null); type map_type_varchar2 is table of varchar2(10) index by binary_integer; map_varchar2 map_type_varchar2; type array_type_varchar2 is varray(10) of varchar2(10); array_varchar2 array_type_varchar2 := array_type_varchar2('123'); type record_type_dept is record ( deptNo number(2), deptName varchar2(14) ); type nestable_type_dept is table of record_type_dept; nestable_dept nestable_type_dept; type array_type_dept is varray(10) of record_type_dept; array_dept array_type_dept; xx boolean;begin dbms_output.put_line('nestable_varchar2.count: ' || nestable_varchar2.count); dbms_output.put_line('map_varchar2.count: ' || map_varchar2.count); dbms_output.put_line('array_varchar2.count: ' || array_varchar2.count); xx := array_varchar2.exists(12); dbms_output.put_line('array_varchar2.exists(12): ' || case when xx then 'yes' else 'no' end); dbms_output.put_line('nestable_dept.count: ' || nestable_dept.count); dbms_output.put_line('array_dept.count: ' || array_dept.count); dbms_output.put_line(1 / 0); exception when others then dbms_output.put_line('exception found.');end;
SQL> DECLARE 2 type array_type_varchar2 is varray(10) of varchar2(10); 3 array_varchar2 array_type_varchar2 := array_type_varchar2('123'); 4 xx BOOLEAN; 5 BEGIN 6 dbms_output.put_line('=='||array_varchar2(1)); 7 xx:=array_varchar2.exists(12); 8 dbms_output.put_line('array_varchar2.exists(12): ' 9 || case when xx then 'yes' else 'no' end); 10 END; 11 /==123array_varchar2.exists(12): yesPL/SQL 过程已成功完成。SQL> DECLARE 2 type array_type_varchar2 is varray(10) of varchar2(10); 3 array_varchar2 array_type_varchar2 := array_type_varchar2('123'); 4 xx BOOLEAN; 5 BEGIN 6 --dbms_output.put_line('=='||array_varchar2(1)); 7 xx:=array_varchar2.exists(12); 8 dbms_output.put_line('array_varchar2.exists(12): ' 9 || case when xx then 'yes' else 'no' end); 10 END; 11 /array_varchar2.exists(12): noPL/SQL 过程已成功完成。
[解决办法]
PL/SQL块同样是以数据库对象为操作对象,但由于SQL本身不具备过程控制功能,所以为了能够与其他语言一样具备过程控制的处理功能,在SQL中加入诸如循环和选择等面向过程的处理功能,由此形成了PL/SQL。所有PL/SQL语句的解释均由PL/SQL引擎来完成,使用PL/SQL块可编写过程,触发器和包等数据库永久对象。
SQL*Plus命令主要用来格式化查询结果,设置选择,编辑以及存储SQL命令,设置查询结果的显示格式,并且可以设置环境选项。可以编辑交互语句,可以与数据库进行“对话”。
[解决办法]
--木有发现你的情况[SYS@myoracle] SQL>startupORACLE 例程已经启动。Total System Global Area 293601280 bytesFixed Size 1248600 bytesVariable Size 88081064 bytesDatabase Buffers 197132288 bytesRedo Buffers 7139328 bytes数据库装载完毕。数据库已经打开。[SYS@myoracle] SQL>set serveroutput on[SYS@myoracle] SQL>DECLARE 2 type array_type_varchar2 is varray(10) of varchar2(10); 3 array_varchar2 array_type_varchar2 := array_type_varchar2('123'); 4 xx BOOLEAN; 5 BEGIN 6 dbms_output.put_line('=='||array_varchar2(1)); 7 xx:=array_varchar2.exists(12); 8 dbms_output.put_line('array_varchar2.exists(12): ' 9 || case when xx then 'yes' else 'no' end); 10 END; 11 /==123array_varchar2.exists(12): noPL/SQL 过程已成功完成。[SYS@myoracle] SQL>DECLARE 2 type array_type_varchar2 is varray(10) of varchar2(10); 3 array_varchar2 array_type_varchar2 := array_type_varchar2('123'); 4 xx BOOLEAN; 5 BEGIN 6 --dbms_output.put_line('=='||array_varchar2(1)); 7 xx:=array_varchar2.exists(12); 8 dbms_output.put_line('array_varchar2.exists(12): ' 9 || case when xx then 'yes' else 'no' end); 10 END; 11 /array_varchar2.exists(12): noPL/SQL 过程已成功完成。[SYS@myoracle] SQL>