侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

精通Oracle10编程SQL(8)使用复合数据类型

数据库  /  管理员 发布于 3年前   190

/* *使用复合数据类型 */--PL/SQL记录--定义PL/SQL记录--自定义PL/SQL记录DECLARE  TYPE emp_record_type IS RECORD(     name emp.ename%TYPE,     salary emp.sal%TYPE,     dno emp.deptno%TYPE  );  emp_record emp_record_type;  ...  --使用PL/SQL记录--在SELECT INTO语句中使用PL/SQL记录--在SELECT INTO语句中使用记录变量DECLARE  TYPE emp_record_type IS RECORD(    name emp.ename%TYPE,    salary emp.sal%TYPE,    dno emp.deptno%TYPE);  emp_record emp_record_type;BEGIN  SELECT ename,sal,deptno into emp_record  from emp where empno=&no;  dbms_output.put_line(emp_record.name);end;--在SELECT INTO语句中使用记录成员DECLARE  type emp_record_type is record(    name emp.ename%TYPE,    salary emp.sal%TYPE,    dno emp.deptno%TYPE);  emp_record emp_record_type;BEGIN  SELECT ename,sal into emp_record.name,emp_record.salary  from emp where empno=&no;  dbms_output.put_line(emp_record.name);end;--在INSERT语句中使用PL/SQL记录--在VALUES子句中使用记录变量DECLARE  dept_record dept%ROWTYPE;BEGIN  dept_record.deptno:=51;  dept_record.dname:='ADMINISTRATOR';  dept_record.loc:='BEIJING';  insert into dept values dept_record;END;SELECT * FROM dept;--在VALUES子句中使用记录成员declare  dept_record dept%ROWTYPE;begin  dept_record.deptno:=60;  dept_record.dname:='SALES';  INSERT INTO dept(deptno,dname) values  (dept_record.deptno,dept_record.dname);end;--在UPDATE语句中使用PL/SQL记录--在SET子句中使用记录变量DECLARE  dept_record dept%ROWTYPE;begin  dept_record.deptno:=60;  dept_record.dname:='SALES';  dept_record.loc:='SHANGHAI';  update dept set row=dept_record where deptno=60;end;select * from dept;--在SET子句中使用记录成员DECLARE  dept_record dept%ROWTYPE;BEGIN  dept_record.loc:='GUANGZHOU';  UPDATE dept set loc=dept_record.loc where deptno=50;end;--在DELETE语句中使用PL/SQL记录DECLARE  dept_record dept%ROWTYPE;begin  dept_record.deptno:=50;  delete from dept where deptno=dept_record.deptno;end;select * from dept;--PL/SQL集合--索引表--在索引表中使用BINARY_INTEGER和PLS_INTEGERDECLARE  TYPE ename_table_type IS TABLE OF emp.ename%TYPE    INDEX BY BINARY_INTEGER;  ename_table ename_table_type;BEGIN  SELECT ename into ename_table(-1) from emp    where empno=&no;  dbms_output.put_line('雇员名:'||ename_table(-1));END;SELECT * FROM EMP;    --在索引表中使用VARCHAR2DECLARE  TYPE area_table_type IS TABLE OF NUMBER    INDEX BY VARCHAR2(10);  area_table area_table_type;BEGIN  area_table('北京'):=1;  area_table('上海'):=2;  area_table('广州'):=3;  dbms_output.put_line('第一个元素:'||area_table.first);  dbms_output.put_line('最后一个元素:'||area_table.last);END;--嵌套表--在PL/SQL块中使用嵌套表--其中,ename_table_type为嵌套表类型,而ename_table_type()是其构造方法DECLARE  type ename_table_type is table of emp.ename%TYPE;  ename_table ename_table_type;BEGIN  ename_table:=ename_table_type('MARY','MARY','MARY');  select ename into ename_table(2) from emp    where empno=&no;  dbms_output.put_line('雇员名:'||ename_table(2));END;--在表列中使用嵌套表create type phone_type is table of varchar2(20);create table employeeTest(  id number(4),name varchar2(10),sal number(6,2),  phone phone_type)nested table phone store as phone_table;--在PL/SQL块中为嵌套表列插入数据BEGIN  INSERT INTO employeeTest values(1,'SCOTT',800,  phone_type('0739-12121212','13800001111'));END;select * from employeeTest;--在PL/SQL块中检索嵌套表列的数据DECLARE   phone_table phone_type;BEGIN   SELECT phone into phone_table from employeeTest where id=1;   for i IN 1..phone_table.count loop     dbms_output.put_line('电话号码:'||phone_table(i));   end loop;end;--在PL/SQL块中更新嵌套表列的数据DECLARE  phone_table phone_type:=phone_type('0471-3456788','13825252525','0471-2233066','13056278568');BEGIN  UPDATE employeeTest set phone=phone_table where id=1;END;--变长数组(VARRAY)--在PL/SQL块中使用VARRY--当在PL/SQL块中使用VARRAY变量时,必须首先使用其构造方法来初始化VARRAY变量,然后才能在PL/SQL块内引用VARRAY元素DECLARE   TYPE ename_table_type IS VARRAY(20) OF emp.ename%TYPE;   ename_table ename_table_type:=ename_table_type('mary');BEGIN   SELECT ename into ename_table(1) from emp where empno=&no;   dbms_output.put_line('雇员名:'||ename_table(1));END;--在表列中使用VARRAYcreate type phone_type is varray(20) of varchar2(20);create table employee(  id number(4),name varchar2(10),  sal number(6,2),phone phone_type);--PL/SQL记录表--处理多行多列数据DECLARE   type emp_table_type is table of emp%ROWTYPE INDEX BY binary_integer;   emp_table emp_table_type;BEGIN   select * into emp_table(1) from emp   where empno=&no;   dbms_output.put_line('雇员姓名:'||emp_table(1).ename);   dbms_output.put_line('雇员工资:'||emp_table(1).sal);END;--多级集合--在PL/SQL块中使用多级VARRAYDECLARE  --定义一维VARRAY  TYPE al_varray_type IS VARRAY(10) of int;  --定义二维VARRAY集合  TYPE nal_varray_type is varray(10) of al_varray_type;  --初始化二维集合变量  nvl nal_varray_type:=nal_varray_type(      al_varray_type(58,100,102),      al_varray_type(55,6,73),      al_varray_type(2,4));BEGIN  dbms_output.put_line('显示二维数组所有元素');  for i in 1..nvl.count loop     for j in 1..nvl(i).count loop        dbms_output.put_line('nvl('||i||','||j||')='||nvl(i)(j));     end loop;  end loop;END;--在PL/SQL块中使用多级嵌套表DECLARE  --定义一维嵌套表  TYPE al_table_type is table of int;  --定义二维嵌套表集合  TYPE nal_table_type is table of al_table_type;  --初始化二维集合变量  nvl nal_table_type:=nal_table_type(      al_table_type(2,4,78),      al_table_type(5,73));BEGIN   DBMS_OUTPUT.put_line('显示二维数组所有元素');   for i in 1..nvl.count loop      for j in 1..nvl(i).count loop          dbms_output.put_line('nvl('||i||','||j||')='||nvl(i)(j));      end loop;    end loop;END;--在PL/SQL块中使用多级索引表DECLARE   --定义一维table   TYPE al_table_type IS TABLE OF INT INDEX BY BINARY_INTEGER;   --定义二维table集合   TYPE nal_table_type is TABLE OF al_table_type index by BINARY_INTEGER;   nvl nal_table_type;BEGIN   nvl(1)(1):=10;   nvl(1)(2):=5;   nvl(1)(3):=57;   nvl(2)(1):=100;   nvl(2)(2):=50;   DBMS_OUTPUT.put_line('显示二维数组所有元素');   for i in 1..nvl.count loop      for j in 1..nvl(i).count loop          dbms_output.put_line('nvl('||i||','||j||')='||nvl(i)(j));      end loop;    end loop;END;--集合方法--集合方法是ORACLE所提供的用于操纵集合变量的内置函数或过程,其中EXISTS,COUNT,LIMIT,FIRST,NEXT,PRIOR和NEXT是函数,而EXTEND,TRIM和DELETE则是过程。--集合方法的调用语法如下:collection_name.method_name[(parameters)]--集合方法只能在PL/SQL语句中使用,而不能在SQL语句中调用。另外集合方法EXTEND和TRIM只适用于嵌套表和VARRAY,而不适用于索引表。--EXISTSDECLARE  TYPE ename_table_type is table of emp.ename%TYPE;  ename_table ename_table_type;BEGIN  if ename_table.EXISTS(1) THEN     ename_table(1):='SCOTT';  else     dbms_output.put_line('必须初始化集合元素');  end if;END;--COUNT--返回当前集合变量中的元素总个数,如果集合元素存在数值,则统计结果会包含该元素,如果集合元素为NULL,则统计结果不会包含该元素DECLARE  type ename_table_type is table of emp.ename%TYPE INDEX BY BINARY_INTEGER;  ename_table ename_table_type;BEGIN  ename_table(-5):='SCOTT';  ename_table(0):='SMITH';  ename_table(5):='MARY';  ename_table(10):='BLAKE';  dbms_output.put_line('集合元素总个数:'||ename_table.count);END;--LIMIT--返回集合元素的最大个数,因为嵌套表和索引表的元素个数没有限制,所以调用该方法会返回NULL,而对于VARRAY来说,该方法会返回VARRAY所允许的最大元素个数DECLARE  type ename_table_type is varray(20) of emp.ename%TYPE;  ename_table ename_table_type:=ename_table_type('mary');BEGIN  DBMS_OUTPUT.PUT_LINE('集合元素的最大个数:' || ename_table.limit);END;--FIRST和LAST--FIRST返回集合变量第一个元素的下标,而LAST方法则用于返回集合变量最后一个元素的下标DECLARE  type ename_table_type is table of emp.ename%TYPE INDEX BY binary_integer;  ename_table ename_table_type;BEGIN  ename_table(-5):='SCOTT';  ename_table(0):='SMITH';  ename_table(5):='MARY';  ename_table(10):='BLAKE';  dbms_output.put_line('第一个元素:'||ename_table.first);  dbms_output.put_line('最后一个元素:'||ename_table.last);END;--PRIOR和NEXT--PRIOR用于返回当前集合元素的前一个元素的下标,而NEXT方法则用于返回当前集合元素的后一个元素的下标DECLARE  type ename_table_type is table of emp.ename%TYPE INDEX BY binary_integer;  ename_table ename_table_type;BEGIN  ename_table(-5):='SCOTT';  ename_table(0):='SMITH';  ename_table(5):='MARY';  ename_table(10):='BLAKE';  dbms_output.put_line('元素5的前一个元素:'||ename_table.prior(5));  dbms_output.put_line('元素5的后一个元素:'||ename_table.next(5));END;--EXTEND--用于扩展集合变量的尺寸,并为它们增加元素,该方法只适用于嵌套表和VARRAY。--EXTEND:为集合变量添加一个null元素--EXTEND(n):为集合变量添加n个null元素--EXTEND(n,i):为集合变量添加n个元素(元素值与第i个元素相同)DECLARE  TYPE ename_table_type is array(20) of varchar2(10);  ename_table ename_table_type;BEGIN  ename_table:=ename_table_type('MARY');  ename_table.extend(5,1);  dbms_output.put_line('元素总个数:'||ename_table.count);END;--TRIM--用于从集合尾部删除元素,它有TRIM和TRIM(n)两种调用格式--其中TRIM用于从集合尾部删除一个元素,而TRIM(n)则用于从集合尾部删除n个元素。--该方法只适用于嵌套表和VARRAYDECLARE   type ename_table_type is table of varchar2(10);   ename_table ename_table_type;BEGIN   ename_table:=ename_table_type('A','A','A','A','A');   ename_table.trim(2);   dbms_output.put_line('元素总个数:'||ename_table.count);END;--DELETE--用于删除集合元素,该方法只适用于嵌套表和索引表,而不适用于VARRAY--DELETE:删除集合变量的所有元素--DELETE(n):删除集合变量的第n个元素--DELETE(m,n):删除集合变量中从m到n之间的所有元素DECLARE  TYPE ename_table_type is table of emp.ename%TYPE INDEX BY BINARY_INTEGER;  ename_table ename_table_type;BEGIN  ename_table(-5):='SCOTT';  ename_table(1):='SMITH';  ename_table(5):='MARY';  ename_table(10):='BLAKE';  ename_table.delete(5);  dbms_output.put_line('元素总个数:'||ename_table.count);END;--集合赋值--通过执行INSERT,UPDATE,FETCH,SELECT,赋值语句,用户可以将一个集合的数据赋值给另一个集合。--SET操作符用于取消嵌套表中的重复值--MULTISET UNION用于取得两个嵌套表的并集(带有DISTINCT操作符可以取消重复结果)--MULTISET INTERSECT用于取得两个嵌套表的交集--MULTISET EXCEPT用于取得两个嵌套表的差集--将一个集合的数据赋值给另一个集合--当使用赋值语句(:=)或SQL语句将源集合中的数据赋值给目标集合时,会自动清除目标集合原有的数据,并将源集合中的数据赋值给该目标集合--注意:当进行集合赋值时,源集合和目标集合的数据类型必须完全一致。如果集合元素数据类型一致,但集合类型不一致,那也不能进行赋值。DECLARE   TYPE name_varray_type is varray(4) of varchar2(10);   name_array1 name_varray_type;   name_array2 name_varray_type;BEGIN   name_array1:=name_varray_type('SCOTT','SMITH');   name_array2:=name_varray_type('a','a','a','a');   dbms_output.put('name_array2的原数据:');   for i in 1..name_array2.count loop      dbms_output.put(' '||name_array2(i));   end loop;   dbms_output.new_line;   name_array2:=name_array1;   dbms_output.put('name_array2的新数据:');   for i in 1..name_array2.count loop      dbms_output.put(' '||name_array2(i));   end loop;   dbms_output.new_line;END;--给集合赋NULL值DECLARE  TYPE name_varry_type is varray(4) of varchar2(10);  name_array name_varry_type;  name_empty name_varry_type;BEGIN  name_array:=name_varry_type('SCOTT','SMITH');  dbms_output.put_line('name_array的原有元素个数:'||name_array.count);  name_array:=name_empty;  if name_array is null then     dbms_output.put_line('name_array的现有元素个数:0');  end if;END;--使用集合操作符给嵌套表赋值--使用SET操作符DECLARE  type nt_table_type is table of number;  nt_table nt_table_type:=nt_table_type(2,4,3,1,2);  result nt_table_type;BEGIN  result:=set(nt_table);  dbms_output.put('result:');  for i in 1..result.count loop    dbms_output.put('  '||result(i));  end loop;  dbms_output.new_line;END;--使用MULTISET UNION操作符--用于取得两个嵌套表的并集DECLARE  TYPE nt_table_type is table of number;  nt1 nt_table_type:=nt_table_type(1,2,3);  nt2 nt_table_type:=nt_table_type(3,4,5);  result nt_table_type;BEGIN  result:=nt1 multiset union nt2;  dbms_output.put('result:');  for i in 1..result.count loop     dbms_output.put(' '||result(i));  end loop;  dbms_output.new_line;END;--使用MULTISET UNION DISTINCT操作符--取得两个嵌套表的并集,并取消重复结果DECLARE  TYPE nt_table_type is table of number;  nt1 nt_table_type:=nt_table_type(1,2,3);  nt2 nt_table_type:=nt_table_type(3,4,5);  result nt_table_type;BEGIN  result:=nt1 multiset union distinct nt2;  dbms_output.put('result:');  for i in 1..result.count loop     dbms_output.put(' '||result(i));  end loop;  dbms_output.new_line;END;--使用MULTISET INTERSECT操作符--用于取得两个嵌套表的交集DECLARE  TYPE nt_table_type is table of number;  nt1 nt_table_type:=nt_table_type(1,2,3);  nt2 nt_table_type:=nt_table_type(3,4,5);  result nt_table_type;BEGIN  result:=nt1 multiset intersect nt2;  dbms_output.put('result:');  for i in 1..result.count loop     dbms_output.put(' '||result(i));  end loop;  dbms_output.new_line;END;--使用MULTISET EXCEPT操作符--用于取得两个嵌套表的差集DECLARE  TYPE nt_table_type is table of number;  nt1 nt_table_type:=nt_table_type(1,2,3);  nt2 nt_table_type:=nt_table_type(3,4,5);  result nt_table_type;BEGIN  result:=nt1 multiset except nt2;  dbms_output.put('result:');  for i in 1..result.count loop     dbms_output.put(' '||result(i));  end loop;  dbms_output.new_line;END;--比较集合--CARDINALITY用于返回嵌套表变量的元素个数,操作符SUBMULTISET OF用于确定一个嵌套表是否为另一个嵌套表的子集--MEMBER OF用于检测特定数据是否为嵌套表元素--IS A SET用于检测嵌套表是否包含重复的元素值--IS EMPTY用于检测嵌套表是否为NULL--检测集合是否为NULLDECLARE   type name_array_type is varray(3) of varchar2(10);   name_array name_array_type;BEGIN   IF name_array is null then      dbms_output.put_line('name_array未初始化');   END IF;END;--当检测嵌套表是否为NULL时,不仅可以使用IS NULL操作符,也可以使用IS EMPTY操作符。--注意,IS EMPTY操作符只适用于嵌套表,而不适用于VARRAYDECLARE   TYPE name_table_type is table of varchar2(10);   name_table name_table_type;BEGIN   if name_table is EMPTY then      dbms_output.put_line('name_table未初始化');   end if;END;--比较嵌套表是否相同--允许使用比较操作符=和!=检测两个嵌套表变量是否相同--注意,使用这两个比较符只能比较嵌套表,而不能比较VARRAY和索引表DECLARE   TYPE name_table_type is table of varchar2(10);   name_table1 name_table_type;   name_table2 name_table_type;BEGIN   name_table1:=name_table_type('SCOTT');   name_table2:=name_table_type('SMITH');   if name_table1=name_table2 then      dbms_output.put_line('两个嵌套表完全相同');   else      dbms_output.put_line('两个嵌套表数值不同');   END IF;END;--在嵌套表上使用集合操作符--从ORACLE 10g开始,可以在嵌套表上使用ANSI集合操作符CARDINALITY,MEMBER OF,IS A SET。--注意,这些操作符只适用于嵌套表,而不适用于VARRAY和索引表--使用函数CARDINALITY,用于返回嵌套表变量的元素个数DECLARE   TYPE nt_table_type is table of number;   nt1 nt_table_type:=nt_table_type(1,2,3,1);BEGIN   dbms_output.put_line('元素个数:'||cardinality(nt1));END;--SUBMULTISET OF:确定一个嵌套表是否为另一个嵌套表的子集DECLARE   TYPE nt_table_type is table of number;   nt1 nt_table_type:=nt_table_type(1,2,4);   nt2 nt_table_type:=nt_table_type(1,2,3,4);BEGIN   if nt1 submultiset of nt2 then      dbms_output.put_line('nt1是nt2的子集');   end if;END;--使用操作符MEMBER OF:检测特定数据是否为嵌套表的元素DECLARE   TYPE nt_table_type is table of number;   nt1 nt_table_type:=nt_table_type(1,2,3,5);   v1 number:=&v1;BEGIN   if v1 member of nt1 then      dbms_output.put_line(v1||'是nt1的元素');   else      dbms_output.put_line(v1||'不是nt1的元素');   end if;END;--使用操作符IS A SET:检测嵌套表是否包含重复的元素值DECLARE   TYPE nt_table_type is table of number;   nt1 nt_table_type:=nt_table_type(1,2,3,5);BEGIN   if nt1 is a set then      dbms_output.put_line('嵌套表nt1无重复值');   else      dbms_output.put_line('嵌套表nt1有重复值');   end if;END;--批量绑定create table demo(  id number(6) primary key,name varchar2(10));--不使用批量绑定DECLARE  TYPE id_table_type is table of number(6) index by binary_integer;  TYPE name_table_type is table of varchar2(10) index by binary_integer;  id_table id_table_type;  name_table name_table_type;  start_time number(10);  end_time number(10);BEGIN  FOR i in 1..5000 loop     id_table(i):=i;     name_table(i):='Name'||to_char(i);  end loop;  start_time:=dbms_utility.get_time;  for i in 1..id_table.count loop      insert into demo values(id_table(i),name_table(i));  end loop;  end_time:=dbms_utility.get_time;  dbms_output.put_line('总计时间(秒):'||to_char((end_time-start_time)/100));END;select * from demo order by id;delete demo;--使用批量绑定DECLARE  TYPE id_table_type is table of number(6) index by binary_integer;  TYPE name_table_type is table of varchar2(10) index by binary_integer;  id_table id_table_type;  name_table name_table_type;  start_time number(10);  end_time number(10);BEGIN  FOR i in 1..5000 loop     id_table(i):=i;     name_table(i):='Name'||to_char(i);  end loop;  start_time:=dbms_utility.get_time;  forall i in 1..id_table.count      insert into demo values(id_table(i),name_table(i));  end_time:=dbms_utility.get_time;  dbms_output.put_line('总计时间(秒):'||to_char((end_time-start_time)/100));END;--批量绑定是使用BULK COLLECT子句和FORALL语句来完成的,其中BULK COLLECT子句用于取得批量数据,该子句只能用于SELECT语句、FETCH语句和DML返回子句中--而FORALL语句只适用于执行批量的DML操作--FORALL语句--在INSERT语句上使用批量绑定DECLARE   TYPE id_table_type is TABLE OF NUMBER(6)      INDEX BY BINARY_INTEGER;   TYPE name_table_type is TABLE OF VARCHAR2(10)      index by binary_integer;   id_table id_table_type;   name_table name_table_type;BEGIN   for i in 1..10 loop      id_table(i):=i;      name_table(i):='Name'||to_char(i);   end loop;   forall i in 1..id_table.count      insert into demo values(id_table(i),name_table(i));End;select * from demo;--在UPDATE语句上使用批量绑定DECLARE   TYPE id_table_type is TABLE OF NUMBER(6)      INDEX BY BINARY_INTEGER;   TYPE name_table_type is TABLE OF VARCHAR2(10)      index by binary_integer;   id_table id_table_type;   name_table name_table_type;BEGIN   for i in 1..5 loop      id_table(i):=i;      name_table(i):='N'||to_char(i);   end loop;   forall i in 1..id_table.count      update demo set name=name_table(i) where id=id_table(i);End;--在DELETE语句上使用批量绑定DECLARE   TYPE id_table_type is table of NUMBER(6)      INDEX BY binary_integer;   id_table id_table_type;BEGIN   for i in 1..3 loop       id_table(i):=i;   end loop;   forall i in 1..id_table.count      delete from demo where id=id_table(i);END;--在FORALL语句中使用部分集合元素DECLARE  TYPE id_table_type is table of number(6)     index by binary_integer;  id_table id_table_type;BEGIN  for i in 1..10 loop     id_table(i):=11-i;  end loop;  forall i in 8..10     insert into demo(id) values(id_table(i));END;SELECT * FROM DEMO;--在FORALL语句上使用INDICES OF子句--用于跳过NULL集合元素DECLARE  TYPE id_table_type is table of number(6);  id_table id_table_type;BEGIN  id_table:=id_table_type(1,null,3,null,5);  forall i in indices of id_table     DELETE FROM demo where id=id_table(i);END;--在FORALL语句上使用VALUES OF子句create table new_demo as select * from demo where 1=0;select * from new_demo;select * from demo;delete new_demo;DECLARE  TYPE id_table_type is table of demo.id%TYPE;  TYPE name_table_type is table of demo.name%TYPE;  id_table id_table_type;  name_table name_table_type;  TYPE index_pointer_type is table of PLS_INTEGER;  index_pointer index_pointer_type;BEGIN  select * bulk collect into id_table,name_table from demo;  index_pointer:=index_pointer_type(4,6,7);      --将第4,6,7这三行数据复制到new_demo表中  forall i in values of index_pointer    insert into new_demo values(id_table(i),name_table(i));END;--使用SQL%BULK_ROWCOUNT属性--属性SQL%BULK_ROWCOUNT是专门为FORALL语句提供的,用于取得在执行批量绑定操作时第i个元素所作用的行数DECLARE   TYPE dno_table_type is table of number(3);   dno_table dno_table_type:=dno_table_type(10,2);BEGIN   forall i in 1..dno_table.count      update emp set sal=sal*1.1 where deptno=dno_table(i);   dbms_output.put_line('第2个元素更新的行数:'||sql%bulk_rowcount(2));END;select * from emp;--BULK COLLECT子句--在SELECT INTO语句中使用BULK COLLECT子句DECLARE   TYPE emp_table_type is table of emp%ROWTYPE      INDEX BY BINARY_INTEGER;   emp_table emp_table_type;BEGIN   SELECT * BULK COLLECT INTO emp_table from emp where deptno=&no;   for i in 1..emp_table.count loop      dbms_output.put_line('雇员姓名:'||emp_table(i).ename);   end loop;END;--在DML的返回子句中使用BULK COLLECT子句DECLARE   TYPE ename_table_type is table of emp.ename%TYPE;   ename_table ename_table_type;BEGIN   DELETE FROM emp where deptno=&no returning ename bulk collect into ename_table;   dbms_output.put('雇员名:');   for i in 1..ename_table.count loop      dbms_output.put(ename_table(i)||' ');   end loop;   DBMS_OUTPUT.new_line;END;

 


  • 上一条:
    精通Oracle10编程SQL(7)编写控制结构
    下一条:
    精通Oracle10编程SQL(9)使用游标
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • mysql5.7中实现分区表及分区where in查询示例及分区分表对比浅析(0个评论)
    • mysql中sql_mode的各模式浅析(0个评论)
    • 预处理之SQL参数化查询是如何防止SQL注入的浅析(0个评论)
    • 使用Navicat把mysql5.7版本的数据库导入至mysql8.1版本中流程步骤(0个评论)
    • 在mysql中设置表字段中COLLATE、CHARSET详解(0个评论)
    • 近期文章
    • 在go语言中使用GoPDF包把html生成PDF文件示例(0个评论)
    • 在go语言中创建和解析(读取)符号链接示例(0个评论)
    • ubuntu 22.04系统中报错:Python 3.6 is no longer supported by the Python core team...解决方式(0个评论)
    • Laravel 10.4版本发布(0个评论)
    • mysql5.7中实现分区表及分区where in查询示例及分区分表对比浅析(0个评论)
    • nginx + vue配置实现同域名下不同路径访问不同项目(0个评论)
    • 在laravel框架中的5个HTTP客户端技巧分享(0个评论)
    • 在go语言中使用FFmpeg库实现PCM音频文件编码为mp3格式文件流程步骤(0个评论)
    • gopacket免安装Pcap实现驱动层流量抓包流程步骤(0个评论)
    • 在laravel项目中实现密码强度验证功能推荐扩展包:password-strength(0个评论)
    • 近期评论
    • 博主 在

      2023年国务院办公厅春节放假通知:1月21日起休7天中评论 @ xiaoB 你只管努力,剩下的叫给天意;天若有情天亦老,..
    • xiaoB 在

      2023年国务院办公厅春节放假通知:1月21日起休7天中评论 会不会春节放假后又阳一次?..
    • BUG4 在

      你翻墙过吗?国内使用vpn翻墙可能会被网警抓,你需了解的事中评论 不是吧?..
    • 博主 在

      go语言+beego框架中获取get,post请求的所有参数中评论 @ t1  直接在router.go文件中配就ok..
    • Jade 在

      如何在MySQL查询中获得当月记录中评论 Dear zongscan.com team, We can skyroc..
    • 2017-06
    • 2017-08
    • 2017-09
    • 2017-10
    • 2017-11
    • 2018-01
    • 2018-05
    • 2018-10
    • 2018-11
    • 2020-02
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-08
    • 2020-09
    • 2021-02
    • 2021-04
    • 2021-07
    • 2021-08
    • 2021-11
    • 2021-12
    • 2022-02
    • 2022-03
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-03
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客