Oracle数据库游标在包中的使用
- 格式:doc
- 大小:19.00 KB
- 文档页数:2
oracle中游标的用法游标是Oracle数据库中一种重要的数据类型,用于处理查询结果集中的数据。
使用游标可以方便地遍历查询结果,进行数据处理和操作。
下面是关于Oracle中游标的用法的参考内容。
一、游标的定义与声明在Oracle数据库中,游标可以在PL/SQL块中使用,用于与查询结果进行交互。
游标的使用分为显示游标和隐式游标两种方式:1. 显示游标:显示游标需要先定义游标类型,然后声明游标变量,并使用OPEN、FETCH和CLOSE等操作进行操作。
示例代码如下:```sql-- 定义游标类型TYPE cursor_type IS REF CURSOR;-- 声明游标变量cursor_var cursor_type;-- 打开游标OPEN cursor_var FOR SELECT * FROM table_name;-- 循环获取游标数据LOOPFETCH cursor_var INTO variable1, variable2...;EXIT WHEN cursor_var%NOTFOUND;-- 对游标数据进行处理END LOOP;-- 关闭游标CLOSE cursor_var;```2. 隐式游标:隐式游标由Oracle自动管理,不需要程序员定义和声明,系统会自动为每一个SELECT语句分配一个隐式游标。
隐式游标无法手动控制游标操作,只能通过向结果集添加条件来限制查询结果。
示例代码如下:```sql-- 查询结果会被自动赋值给隐式游标SELECT * FROM table_name;-- 循环处理查询结果LOOP-- 对查询结果进行处理-- 退出循环条件END LOOP;```二、游标的属性和操作1. 游标属性:(1) %FOUND:如果游标指向的结果集中有数据,则返回真;否则返回假。
(2) %NOTFOUND:如果游标指向的结果集中没有数据,则返回真;否则返回假。
(3) %ROWCOUNT:返回游标当前处理的行数。
oracle中游标的用法游标(Cursor)是Oracle中的一个重要概念,用于访问和处理由SQL查询生成的结果集。
通过使用游标,可以逐行处理查询结果,方便地对数据进行处理和分析。
本文将介绍Oracle 中游标的用法。
首先,需要使用DECLARE语句来定义游标变量。
游标变量是一种特殊的变量类型,用于存储和操作游标。
下面是游标变量的定义语法:```DECLAREcursor_variable_name CURSOR; -- 游标变量的定义```游标变量的名称可以根据需要自行命名。
在游标定义之后,可以使用OPEN语句来打开游标,并执行SQL查询语句。
下面是打开游标的语法:```OPEN cursor_variable_name FOR SELECT_statement; -- 打开游标并执行查询```SELECT_statement是一个有效的SELECT语句,用于从数据库中检索数据。
游标打开之后,可以使用FETCH语句来逐行读取查询结果集中的数据。
下面是FETCH语句的语法:```FETCH cursor_variable_name INTO variables_list; -- 逐行读取数据```variables_list是一个由实际变量组成的列表,用于存储每次读取的行数据。
在使用FETCH语句之前,需要声明相应的变量来存储对应的数据。
使用游标的一个常见操作是使用循环来逐行处理结果集。
可以使用循环语句,如WHILE和FOR循环,来重复执行FETCH 语句,直到读取完所有的行。
下面是使用游标和循环的示例代码:```sqlDECLAREcursor_variable_name CURSOR;-- 声明变量来存储读取的数据variable1 datatype1;variable2 datatype2;BEGINOPEN cursor_variable_name FOR SELECT_statement;LOOPFETCH cursor_variable_name INTO variable1, variable2;-- 处理读取的数据-- 进行一些操作-- 如果读取完所有行,则退出循环EXIT WHEN cursor_variable_name%NOTFOUND;END LOOP;-- 关闭游标CLOSE cursor_variable_name;END;```在循环体内,可以根据需要对读取的数据进行处理,例如进行计算、记录到其他表中、输出到日志等操作。
oracle 游标的使用方法The use of Oracle cursors is an essential aspect of working with the Oracle database. 游标是一种在Oracle数据库中非常重要的使用方法。
A cursor allows the user to traverse through a result set and process each individual row. 游标允许用户遍历结果集并处理每个单独的行。
This is particularly useful when working with large datasets and needing to perform operations on each row or when only a single row needs to be processed at a time. 当处理大型数据集并且需要对每一行执行操作时,这是非常有用的。
In Oracle, there are two types of cursors: implicit and explicit. 在Oracle中,有两种类型的游标:隐式和显式。
Implicit cursors are automatically created by Oracle when a SELECT, INSERT, UPDATE, or DELETE statement is executed. 隐式游标在执行SELECT、INSERT、UPDATE或DELETE语句时,Oracle会自动创建。
This type of cursor is often used for simple queries where the user does not need to define and manage the cursor explicitly. 这种类型的游标通常用于简单的查询,用户不需要显式定义和管理游标。
oracle 游标用法Oracle游标是一种用于在PL/SQL中处理查询结果的机制。
游标可以让程序员逐行处理查询结果,而不是一次性将所有结果读入内存。
本文将详细介绍Oracle游标的用法。
一、游标概述1.1 游标的定义游标是一个指向查询结果集的指针,程序员可以使用它来逐行处理查询结果。
1.2 游标的类型Oracle支持显式和隐式两种类型的游标。
显式游标需要明确地声明和打开,而隐式游标则由Oracle自动管理。
1.3 游标的优点使用游标可以减少内存占用,提高程序性能。
同时,它也提供了更灵活的数据处理方式。
二、显式游标2.1 游标声明在PL/SQL中声明一个显式游标需要使用CURSOR关键字。
下面是一个例子:DECLARECURSOR c_emp IS SELECT * FROM emp;BEGIN-- do something hereEND;这个例子声明了一个名为c_emp的游标,它指向emp表中所有记录。
2.2 游标打开在使用之前,需要先打开一个已声明的游标。
可以使用OPEN语句来打开一个显式游标:DECLARECURSOR c_emp IS SELECT * FROM emp;BEGINOPEN c_emp;END;2.3 游标读取数据打开之后,我们可以使用FETCH语句来逐行读取游标指向的结果集。
FETCH语句可以用于一个或多个变量,它会将查询结果赋值给这些变量。
下面是一个例子:DECLARECURSOR c_emp IS SELECT * FROM emp;v_empno emp.empno%TYPE;v_ename emp.ename%TYPE;BEGINOPEN c_emp;FETCH c_emp INTO v_empno, v_ename;END;这个例子从c_emp游标中读取了一行数据,并将empno和ename 分别赋值给了v_empno和v_ename。
2.4 游标关闭在使用完毕后,需要关闭已打开的游标。
Oracle数据库实验-PLSQL游标、过程、函数、包的使用Oracle数据库基础实验5 PL/SQL游标、过程、函数、包的使用【实验学时】2学时【实验目的】1.了解PL/SQL语言中显式游标和隐式游标的概念和属性。
2.了解显式游标和隐式游标的差异。
3.掌握PL/SQL中cursor for循环的使用方法。
4.学会在PL/SQL程序中使用游标来解决实际问题。
5.学会在PL/SQL程序中进行异常处理的方法。
6.练习在PL/SQL中自定义异常。
7.理解过程和函数的作用。
8.学会编写过程、函数、包,并加以调用。
【实验内容】1.用显式游标编写程序,程序的功能是:计算每一个部门的平均工资。
注意异常的处理(例如,分母为0的异常)。
已写入文件afiedt.buf1 declare2 cursor c_dept is select * from dept order by deptno;3 cursor c_emp(p_dept emp.deptno%type)is selectename,sal from emp where deptno=p_dept4 order by ename;5 r_dept dept%rowtype;6 v_ename emp.ename%type;7 v_salary emp.sal%type;8 v_tot_salary emp.sal%type;9 begin10 open c_dept;11 loop12 fetch c_dept into r_dept;13 exit when c_dept%notfound;14dbms_output.put_line('department:'||r_dept.deptno||'-'||r_de pt.dname);15 v_tot_salary:=0;16 open c_emp(r_dept.deptno);17 loop18 fetch c_emp into v_ename,v_salary;19 exit when c_emp%notfound;20dbms_output.put_line('name:'||v_ename||'salary:'||v_salary);21 v_tot_salary:=v_tot_salary+v_salary;22 end loop;23 close c_emp;24 dbms_output.put_line('total salary fordept:'||v_tot_salary);25 end loop;26 close c_dept;27* end;SQL> /PL/SQL 过程已成功完成。
Oracle中游标的⽤法什么是游标?①从表中检索出结果集,从中每次指向⼀条记录进⾏交互的机制。
②关系数据库中的操作是在完整的⾏集合上执⾏的。
由 SELECT 语句返回的⾏集合包括满⾜该语句的 WHERE ⼦句所列条件的所有⾏。
由该语句返回完整的⾏集合叫做结果集。
应⽤程序,尤其是互动和在线应⽤程序,把完整的结果集作为⼀个单元处理并不总是有效的。
这些应⽤程序需要⼀种机制来⼀次处理⼀⾏或连续的⼏⾏。
⽽游标是对提供这⼀机制的结果集的扩展。
游标是通过游标库来实现的。
游标库是常常作为数据库系统或数据访问 API 的⼀部分⽽得以实现的软件,⽤来管理从数据源返回的数据的属性(结果集)。
这些属性包括并发管理、在结果集中的位置、返回的⾏数,以及是否能够在结果集中向前和/或向后移动(可滚动性)。
游标跟踪结果集中的位置,并允许对结果集逐⾏执⾏多个操作,在这个过程中可能返回⾄原始表,也可能不返回⾄原始表。
换句话说,游标从概念上讲基于数据库的表返回结果集。
由于它指⽰结果集中的当前位置,就像计算机屏幕上的光标指⽰当前位置⼀样,“游标”由此得名。
游标有什么作⽤?①指定结果集中特定⾏的位置。
②基于当前的结果集位置检索⼀⾏或连续的⼏⾏。
③在结果集的当前位置修改⾏中的数据。
④对其他⽤户所做的数据更改定义不同的敏感性级别。
⑤可以以编程的⽅式访问数据库。
⼀、游标:1、概念:游标的本质是⼀个结果集resultset,主要⽤来临时存储从数据库中提取出来的数据块。
⼆、游标的分类:1、显式游标:由⽤户定义,需要的操作:定义游标、打开游标、提取数据、关闭游标,主要⽤于对查询语句的处理。
属性:%FOUND %NOTFOUND %ISOPEN %ROWCOUNTExample:打印emp表的员⼯信息DECLARECURSOR emp_cursor IS SELECT empno,ename,job FROM emp;v_empno emp.empno%TYPE;v_name emp.ename%TYPE;v_job emp.job%TYPE;BEGINOPEN emp_cursor;LOOPFETCH emp_cursor INTO v_empno,v_name,v_job;DBMS_OUTPUT.PUT_LINE('员⼯号为:'||v_empno||'姓名是'||v_name||'职位:'||v_job);EXIT WHEN emp_cursor%NOTFOUND;END LOOP;CLOSE emp_cursor;END;这⾥严格按照显⽰游标的书写规则:DECLARE emp_cursor定义游标OPEN emp_cursor打开游标FETCH emp_cursor INTO...提取数据CLOSE emp_cursor关闭游标,因为提取出来的数据属于多⾏,所以通过loop循环打印即可。
oracle中游标的用法游标(Cursor)是一个用于遍历和操作查询结果集的数据库对象。
它是一种类似于指针的结构,可以用来定位在查询结果集中的当前记录,并进行各种操作。
在Oracle数据库中,游标有两种类型:显式游标和隐式游标。
显式游标是通过PL/SQL代码中的DECLARE语句显式定义的游标,而隐式游标则是在执行一些SQL操作时由数据库自动创建的。
下面是一些关于Oracle中游标的用法的参考内容:1. 显式游标的使用:DECLAREcursor_name CURSOR IS SELECT column_name FROMtable_name;variable_name table_name.column_name%TYPE;BEGINOPEN cursor_name;LOOPFETCH cursor_name INTO variable_name;EXIT WHEN cursor_name%NOTFOUND;-- 执行操作END LOOP;CLOSE cursor_name;END;以上是显式游标的一般用法。
首先使用DECLARE语句声明一个游标,并定义一个变量来存储查询结果的某一列的值。
然后使用OPEN语句打开游标,FETCH语句用于将下一行的值赋给变量。
在循环中,执行操作,并使用EXIT WHEN语句在满足某个条件时退出循环。
最后使用CLOSE语句关闭游标。
2. 隐式游标的使用:在PL/SQL块中执行的SQL语句会自动创建隐式游标,并将结果集存储在隐式游标中。
可以使用隐式游标的变量名来访问和操作结果集。
例子:variable_name table_name.column_name%TYPE;SELECT column_name INTO variable_name FROM table_name WHERE condition;在这个例子中,使用SELECT语句将查询结果赋给变量。
变量的类型可以使用%TYPE关键字来指定。
oracle cursor正确用法Oracle Cursor正确用法什么是Oracle Cursor在Oracle数据库中,Cursor(游标)是一种用于检索和操作结果集的数据库对象。
它可以被视为内存中的一个指针,用于指向查询结果集的当前行。
通过游标,我们可以对查询结果进行遍历和操作。
Cursor的声明和打开(OPEN)使用Cursor之前,需要先声明并打开它。
采用以下步骤:1.声明Cursor:CURSOR cursor_name IS query;–cursor_name是游标的名称,可以根据实际情况自行命名。
–query是查询的语句,可以是简单的SELECT语句,也可以包括一些复杂的逻辑。
2.打开Cursor:OPEN cursor_name;–cursor_name是要打开的游标名称。
Cursor的使用遍历结果集可以使用LOOP语句来遍历Cursor的结果集。
LOOPFETCH cursor_name INTO variable1, variable2, ...;EXIT WHEN cursor_name%NOTFOUND;-- 进行一些逻辑操作END LOOP;•FETCH语句用于获取当前行的数据,将其赋值给变量。
•EXIT WHEN cursor_name%NOTFOUND用于在结果集遍历完后跳出循环。
关闭Cursor在使用Cursor之后需要关闭它,释放资源。
CLOSE cursor_name;Cursor的参数传递Cursor还可以作为过程的参数进行传递。
通过传递Cursor,可以在不同的过程中复用相同的查询逻辑。
PROCEDURE procedure_name(cursor_name IN OUT SYS_REF CURSOR) IS...总结通过声明、打开、遍历和关闭Cursor,我们可以有效地操作Oracle数据库中的结果集。
同时,Cursor还可以作为过程的参数进行传递,在不同的过程中复用相同的查询逻辑。
【主题】Oracle存储过程游标的用法在数据库管理和开发中,Oracle存储过程是一种非常常见的数据库对象,它允许我们在数据库中完成一系列操作,并且可以通过参数传递数据。
而游标则是存储过程中经常使用的数据库对象,用于处理查询结果集。
今天,我们将深入探讨Oracle存储过程中游标的用法,以便更好地理解和应用这一特性。
一、基本概念1.1 游标的定义和作用在Oracle数据库中,游标是一种用于处理查询结果集的对象。
它可以让存储过程逐行处理查询结果,进行逻辑判断和数据操作,从而实现更灵活的数据处理和业务逻辑。
在存储过程中,经常需要用到游标来处理复杂的查询逻辑和结果集操作。
1.2 游标的分类在Oracle数据库中,我们通常可以将游标分为显式游标和隐式游标。
显式游标是由程序员手动定义和使用的游标,而隐式游标则是在某些情况下自动创建和使用的游标。
两者在特性和使用方式上略有不同,需要根据实际情况选择合适的方式来处理查询结果集。
二、使用方式2.1 游标的声明和打开在存储过程中,我们需要先声明一个游标变量,然后通过OPEN语句打开游标,使其准备好处理查询结果集。
在声明游标时,需要指定游标的返回类型(REF CURSOR)和查询语句,以便游标知道如何处理结果集。
2.2 游标的循环和操作一旦游标被打开,我们就可以通过FETCH语句从游标中逐行读取数据,并对数据进行逻辑判断和操作。
通常我们会使用循环语句(如WHILE 循环或FOR循环)来逐行处理结果集,直到处理完所有数据为止。
2.3 游标的关闭和释放在完成游标的操作后,我们需要通过CLOSE语句关闭游标,以确保游标所占用的资源得到释放和回收,避免对系统性能造成不必要的影响。
游标关闭后,也需要及时释放游标变量所占用的资源,以免出现资源泄露和内存溢出的情况。
三、个人观点和理解通过对Oracle存储过程游标的用法进行深入探讨,我对游标的作用和使用方式有了更清晰的认识。
游标在存储过程中的灵活运用,可以帮助我们更好地处理复杂的查询结果集,实现精细化的数据逻辑和业务操作。
Oracle显⽰游标的使⽤及游标for循环下⾯给⼤家介绍在什么情况下⽤隐式游标,什么情况下⽤显⽰游标:1.查询返回单⾏记录时→隐式游标;2.查询返回多⾏记录并逐⾏进⾏处理时→显式游标--显⽰游标属性declareCURSOR cur_emp IS SELECT * FROM emp;row_emp cur_emp%ROWTYPE;BEGINOPEN cur_emp;FETCH cur_emp INTO row_emp;WHILE cur_emp%FOUNDLOOPdbms_output.put_line(row_emp.empno||'----'||row_emp.ename);FETCH cur_emp INTO row_emp;END LOOP;close cur_emp;END;--使⽤显式游标修改数据(给所有的部门经理加薪1000)DECLARECURSOR emp_cur ISSELECT empno,ename,sal FROM emp WHERE job='MANAGER' FOR UPDATE;emp_row emp_cur%ROWTYPE;BEGINOPEN emp_cur;LOOPFETCH emp_cur INTO emp_row;IF emp_cur%NOTFOUND THENEXIT;ELSEUPDATE emp SET sal=sal+1000 WHERE CURRENT OF emp_cur;END IF;END LOOP;COMMIT;CLOSE emp_cur;END;·注意:1、如果游标打开之前或关闭之后,使⽤游标属性,Oracle会抛出⼀个INVALID_CURSOR错误(ORA-01001);2、如果在第⼀次fetch后结果集是空的,%found=false,%NotFound=true,%ROWCOUNT=0;3、如果使⽤了BULK COLLECT,那么%ROWCOUNT的值可能不是0或1,实际上他返回的是提取到相关集合的⾏数。
Oracle中游标的用法1. 引言在Oracle数据库中,游标(Cursor)是一种用于处理查询结果集的机制。
通过使用游标,我们可以在应用程序中对查询结果集进行遍历、操作和管理。
本文将详细介绍Oracle中游标的用法,包括游标的定义、声明、打开、关闭以及使用游标进行数据检索和更新等操作。
2. 游标的定义与声明在Oracle数据库中,我们可以使用DECLARE语句来定义和声明游标。
以下是一个简单的示例:DECLARECURSOR cursor_name IS SELECT column1, column2 FROM table_name;在上述示例中,cursor_name是游标的名称,SELECT column1, column2 FROMtable_name是一个SQL查询语句,它指定了要从哪个表中检索数据。
3. 游标的打开与关闭在使用游标之前,我们需要先打开它。
要打开一个游标,我们可以使用OPEN语句。
以下是一个示例:OPEN cursor_name;当我们完成对游标的操作后,需要关闭它以释放资源。
要关闭一个游标,我们可以使用CLOSE语句。
以下是一个示例:CLOSE cursor_name;注意,在关闭一个已经被打开的游标之前,我们必须先确保已经完成了对其所有操作。
4. 使用游标进行数据检索一旦我们定义、声明并打开了一个游标,我们就可以使用它来检索数据。
在Oracle中,我们可以使用FETCH语句对游标中的数据进行逐行检索。
以下是一个示例:FETCH cursor_name INTO variable1, variable2;在上述示例中,variable1和variable2是用于接收查询结果的变量。
当我们需要遍历整个结果集时,可以使用循环结构来连续地检索数据。
以下是一个示例:DECLARECURSOR cursor_name IS SELECT column1, column2 FROM table_name;variable1 table_name.column1%TYPE;variable2 table_name.column2%TYPE;BEGINOPEN cursor_name;LOOPFETCH cursor_name INTO variable1, variable2;EXIT WHEN cursor_name%NOTFOUND; -- 当没有更多的数据可检索时退出循环-- 在这里执行对查询结果的操作END LOOP;CLOSE cursor_name;END;在上述示例中,我们使用了一个无限循环,并在每次迭代中通过FETCH语句将查询结果赋值给变量。
Oracl e 游标使用大全目录Oracle 游标使用大全 (1)1.游标简介 (2)2.查询SELECT... INTO (2)3.%TYPE属性 (2)4.其他DML语句 (3)5.DML语句的结果 (3)5.1 SQL%FOUND和SQL%NOTFOUND (3)5.2SQL%ROWCOUNT (4)5.3SQL%ISOPEN (4)6.事务控制语句 (4)7.显式游标与隐式游标 (4)8.使用游标 (7)8.1 声明游标 (7)8.2 打开游标 (7)8.3 关闭游标 (7)8.4 从游标提取数据 (8)8.5 记录变量 (9)8.6 带参数的游标 (9)8.7 游标FOR循环 (11)8.8 在游标FOR循环中使用查询 (12)8.9 游标中的子查询 (12)8.10 游标中的更新和删除 (12)1. 游标简介在数据库中,游标是一个十分重要的概念,游标提供了一种灵活手段,可以对表中检索出的数据进行操作。
就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。
游标由结果集和结果集中指向特定记录的游标位置组成,游标充当指针的作用。
尽管游标能够遍历查询结果中的所有行,但它一次只能指向一行。
使用数据游标可以选择一组数据,可以在记录集上滚动游标,并检查游标指向的每一行数据。
可以用局部变量和游标的组合来分别检查每个记录,并在转移到下一个记录之前,进行所需的任何外部操作。
游标的另一个常见用途是保存查询结果,以便以后使用。
游标的结果集是由select语句产生,如果处理过程需要重复使用一个记录集,那么创建一次游标而重复使用若干次,比重复查询数据库要快得多。
2. 查询SELECT… INTO …在存储过程中,select某一字段时,后面必须紧跟into,如果select整个记录,利用游标的话就另当别论了。
SELECT语句用于从数据库中查询数据,当在PL/SQL中使用SELECT语句时,要与INTO子句一起使用,查询的返回值被赋予INTO子句中的变量,变量的声明是在DELCAREPL/SQL中SELECT语句只返回一行数据。
六.Oracle中游标的使⽤⼀。
游标的使⽤: 1.游标的概念--游表的概念--游标是Oracle系统在内存中开发的⼀个⼯作区,在其中存放select查询语句返回的查询集;--在游标所定义的⼯作区中,存放着⼀个指针(pointer),在初始状态它指向查询的⾸记录,当指针放置在某⾏后,即对该⾏数据进⾏操作;--游标分为两类:--隐式游标--显⽰游标:--普通游标(静态游标)--引⽤游标(动态游标)--带有参数--使⽤游标的5个步骤:--声明⼀个变量,⽤来保存记录的列值;--声明游标,并指定查询--打开游标--⼀次从游标中获取⼀个记录。
--关闭游标 --游标的分类: --游标分为两⼤类:显⽰游标 隐式游标 其中显⽰游标⼜分为三种: 1.普通游标 2.动态游标 3.带有参数的游标 2.普通游标的定义及执⾏结果--普通游标:--声明⼀些变量,⽤来保存记录的列值declare empTile emp%rowtype;--声明游标,并指定查询cursor cur is select*from emp where sal>2000;begin--打开游标open cur;--⼀次从游标中获取⼀个记录。
loopfetch cur into empTile;exit when cur%notfound;s(empTile.ename || empTile.sal);end loop;--关闭游标close cur;end; 执⾏结果如下: 3.动态游标的使⽤--动态游标declare myjob varchar2(20):='&请输⼊你的职位';empTemp emp%rowtype; --1.声明⼀些变量,⽤来保存⾏的值cur sys_refcursor; --2.声明游标mysql varchar2(50);beginmysql:='select * from emp';if(myjob is not null) thenmysql:=mysql ||' where job='''|| myjob ||''''; --此处的‘‘’ 表⽰两个转译字符,两个单引转译⼀个单引end if;s(mysql);open cur for mysql; --打开游标loopfetch cur into empTemp; --4.抓取⼀⾏数据到记录类型,只有fetch 之后,%notfound才被赋予值exit when cur%notfound;dbms_output.put_line(empTemp.ename || empTemp.sal);end loop;close cur; --5.关闭游标end; 输⼊要查询的⼯作职位: 点击ok查看执⾏结果:。
--创建学员信息表
create table stuInfo
(
stuId varchar2(15) not null, --学员Id,主键
stuName varchar2(10) not null, --学员姓名
stuNo varchar2(10) not null, --学号,外键应用stuMarks的stuNo
stuAge int not null, --年龄
stuAddress varchar2(100) default('中国') not null,--家庭住址
stuEmail varchar2(100) not null --电子邮箱
);
alter table stuInfo add constraint PK_stuId primary key(stuId);
alter table stuInfo add constraint CK_stuAge check(stuAge between 18 and 40); alter table stuInfo add constraint CK_stuEmail check(stuEmail like '%@%');
--创建序列
create sequence SQ_ID
increment by 1
start with 10000;
--为学员信息表创建触发器TG_STUID
create or replace trigger TG_STUID
before insert on stuInfo for each row
begin
select 'SID'||SQ_ID.Nextval into :new.stuId from dual;
end;
--向学员信息表中添加数据
insert into stuInfo(stuName,stuNo,stuAge,stuAddress,stuEmail) values
('张飞','s1t0102',30,'三国','');
insert into stuInfo(stuName,stuNo,stuAge,stuAddress,stuEmail) values
('关羽','s1t0830',35,'蜀国','');
insert into stuInfo(stuName,stuNo,stuAge,stuAddress,stuEmail) values
('马超','s2t1326',25,'三国','');
insert into stuInfo(stuName,stuNo,stuAge,stuAddress,stuEmail) values
('刘备','s3t0403',40,'蜀国','');
insert into stuInfo(stuName,stuNo,stuAge,stuAddress,stuEmail) values
('诸葛亮','s2t1521',21,'蜀国','');
insert into stuInfo(stuName,stuNo,stuAge,stuAddress,stuEmail) values
('刘翔','s3t0706',29,'上海','');
insert into stuInfo(stuName,stuNo,stuAge,stuAddress,stuEmail) values
('曹操','s3t0915',34,'魏国','');
insert into stuInfo(stuName,stuNo,stuAge,stuAddress,stuEmail) values
('孙权','s1t1123',32,'东吴','');
insert into stuInfo(stuName,stuNo,stuAge,stuAddress,stuEmail) values
('董卓','s2t0507',35,'三国','');
insert into stuInfo(stuName,stuNo,stuAge,stuAddress,stuEmail) values
('朱军','s2t1127',39,'北京','');
************************************
--在包中使用游标(无参游标)
--定义包头
create or replace package PKG_STU
is
cursor getStuInfo return stuInfo;
end PKG_STU;
--创建包体
create or replace package body PKG_STU
as
cursor getStuInfo return stuInfo is
select * from stuInfo;
end PKG_STU;
--调用包
begin
for stu_Record in PKG_STU.getStuInfo loop
dbms_output.put_line('学员姓名:'||stu_Record.stuName||'学号:'|| stu_Record.stuNo||'年龄:'||stu_Record.stuAge);
end loop;
end;
运行结果如下:
*************************************************
--在包中使用有参数的游标
--定义包头
create or replace package PKG_STU
is
cursor getStuInfo(studentNo varchar2) return stuInfo;
end PKG_STU;
--创建包体
create or replace package body PKG_STU
is
cursor getStuInfo(studentNo varchar2) return stuInfo
is select * from stuInfo where stuNo = studentNo;
end;
--调用包测试
begin
for stuRecord in PKG_STU.getStuInfo('s2t1521') loop
dbms_output.put_line('学员姓名:'||stuRecord.stuName||
'学号:'||stuRecord.stuNo||'年龄:'||stuRecord.stuAge);
end loop;
end;
运行结果如下:。