- //%type
- //如果声明的变量是直接映射到数据库的某一列上,那么就可以使用%type关键字将变量
- //锚定到这个列上。这样做有什么好处呢?
- //比如:
- //declare v_ename scott.emp.ename%type;
- //当数据类型发生变化时,此方法显得非常灵活。
- //如果更改了列的长度,那么锚定到该列上的所有变量都会自动更改其长度;
- //假设我们将v_ename定义为varchar2(10),那么当emp表中的ename列发生变化时,
- //我们得手动将v_enam更改为emp.ename相同的数据长度;
- //当我们使用锚定类型后,变量就会自动进行调整。
- //%rowtype
- //%rowtype与%type相似;不过它将变量锚定到表的所有列,而不是锚定到某一列;
- //更多关于%rowtype与%type,
- //请参考:http://blog.csdn.net/BOBO12082119/archive/2010/12/02/6051367.aspx
- //下面是一个实例:
- create table dept(
- deptno varchar2(5),
- dname varchar2(20),
- loc varchar2(20)
- );
- create or replace procedure pro_insert(
- deptno_in in dept.deptno%type,
- dname_in in dept.dname%type,
- loc_in in dept.loc%type
- )
- as
- v_dept dept%rowtype;
- begin
- begin
- insert into dept
- select deptno_in,dname_in,loc_in
- from dual;
- commit;
- dbms_output.put_line('inserting successed');
- exception
- when others then
- rollback;
- end;
- begin
- select deptno_in,dname_in,loc_in
- into v_dept from dual;
- dbms_output.put_line(
- 'The data having been inserted.'||
- 'deptno:'||v_dept.deptno||
- ',dname:'||v_dept.dname||
- ',loc:'||v_dept.loc
- );
- end;
- end pro_insert;
- //
- //上面的过程中,使用到了嵌套块;
- //所谓嵌套块就是块中包含其他子块;
- //嵌套块允许出现在代码块的异常处理部分和执行部分,
- //但是不允许出现在声明中。
- //
- SQL> set serveroutput on;
- SQL> exec pro_insert('111','财务部','福州');
- inserting successed
- The data having been inserted.deptno:111,dname:财务部,loc:福州
- PL/SQL procedure successfully completed
- //
- //从这里看出来,%rowtype定义的变量作用有点相似游标,
- //但是我们不能将%rowtype定义的变量当做游标来使用,
- //否则我们将会得到下面的错误:
- //ORA-01422: exact fetch returns more than requested number of rows
- declare v_dept dept%rowtype;
- begin
- select deptno,dname,loc
- into v_dept
- from dept;
- dbms_output.put_line(
- 'The data having been inserted.'||
- 'deptno:'||v_dept.deptno||
- ',dname:'||v_dept.dname||
- ',loc:'||v_dept.loc
- );
- end;
- //
- //下面我们用游标来实现上面的操作,具体看下面的匿名块:
- declare
- cursor cv_dept is
- select *
- from dept;
- begin
- //变量v_dept不必我们显示声明
- //for循环会为我们隐式的打开和关闭游标,不必我们现实的打开和关闭游标
- for v_dept in cv_dept loop
- dbms_output.put_line(
- 'deptno:'||v_dept.deptno||
- ',dname:'||v_dept.dname||
- ',loc:'||v_dept.loc
- );
- end loop;
- end;
- //
- deptno:111,dname:财务部,loc:福州
- deptno:120,dname:销售部,loc:大连
- deptno:130,dname:科研部,loc:北京
- PL/SQL procedure successfully completed
详细解决方案
oracle %type和%rowtype
热度:57 发布时间:2024-01-17 09:14:26.0
相关解决方案
- 求教,SSH + ORACLE 日期处理有关问题
- hibernate 连接 oracle session 有关问题
- spring MVC cvc-complex-type.2.4.c解决方案
- 新手,请问input type=text有关问题
- eclipse+tomcat6.0+oracle 10g配置数据库连接池的异常
- 不走"<script type='text/javascript'>"标签咋回事
- java 生成 word 封存到 oracle 数据库
- <input type="hidden" name="" value="" />请教这句话的name,value什么意思
- input type=text 替空时 ,为什么不为null
- 在jsp页面下导入.xls文件,报错:Posted content type isn't multipart/form-data
- <script type="javascript/text">的有关问题
- oracle 最大连市接数 为什么main方法无限拿连接
- oracle 分页排序,ssi,该怎么处理
- oracle 最近的时间(而不是前一天的时间) 跪求sql语句 。解决方法
- java.lang.IllegalArgumentException: argument type mismatch解决方案
- struts2 type="redirect"该如何处理
- 'http://reg.163.com/login.jsp?type=1&url=http://entry.mail.163.com/coremail/fcg/,该如何处理
- java.sql.SQLException: No suitable driver found for jdbc:oracle:thin:192.168解决思路
- 小弟我在网下找的图片验证码,小弟我这个页面的值<input type="text">如何传不到Servlet里面去,请高手瞧瞧
- streams type cannot be used in batching,该如何解决
- unsupported content type in editor解决思路
- java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver,该怎么处理
- Jsp + Oracle 怎么取回id,报错getInt not implemented for class oracle.jdbc.driver.T4CRo
- oracle 调用java程序,该如何处理
- oracle,该怎么解决
- 在 Hibernate3 查询不到 Oracle 11g 里的记录
- Cannot find any information on property 'cipher' in a bean of type 'xx.JiamiBean解决思路
- Only a type can be imported. com.mysql.jdbc.Driver resolves to a package解决方案
- 请问:org.apache.jasper.JasperException: Cannot find any information on property 'userPhone' in a bean of type 'Bean.Sender'
- Oracle 评论排序!该怎么解决