设为首页 收藏本站
查看: 624|回复: 0

[经验分享] oracle 用过程获得表的字段

[复制链接]

尚未签到

发表于 2016-7-25 08:11:54 | 显示全部楼层 |阅读模式
  //在存储过程里面,我们常常将从一个表里面查询到的字段数据复制给一写变量,//然后调用包里面的函数dbms_output.put_line()来将其打印出来;//下面是一个实例:procedure show_employee(empno_in in emp.empno%type)  as  v_sign number;  v_empno emp.empno%type;  v_ename emp.ename%type;  v_deptno emp.deptno%type;  beginselect 1 into v_sign  from dual  where exists(select count(*) from emp where empno=empno_in);  if v_sign=1 then  select empno,ename,deptno into v_empno,v_ename,v_deptno  from emp where empno=empno_in;  dbms_output.put_line('information of'||empno_in||' are:');  dbms_output.put_line('empno:'||v_empno||',ename:'||v_ename||',deptno:'||v_deptno);  end if;  exception  when others then  dbms_output.put_line('no data found');  end show_employee;SQL> exec show_employee('7900');information of7900 are:empno:7900,ename:JAMES,deptno:30////但是我们怎么样将一个表的结构用存储过程倒出来呢?//就是写一个过程,参数是传进去表的名字,然后打印出表的所有字段;create or replace procedure pro_display_col(table_name_in varchar2)astype arry_type is table of varchar2(30) index by pls_integer;v_cols arry_type;beginselect tc.column_name bulk collectinto v_colsfrom user_tab_columns tcwhere tc.table_name=upper(table_name_in);for i in 1..v_cols.countloopdbms_output.put_line(v_cols(i));end loop;exceptionwhen others thendbms_output.put_line(sqlerrm);end pro_display_col;///解析://此处定义了一个嵌套表数据类型,通俗意义上叫做数组,没有最大限制,//并定义了一个接收返回值的字符串类型,30个字节,接受15个字符//我们也可以将其定义为接受30个字符的嵌套表://type array_type is a table of varchar2(30 char) index by pls_integer;//index by pls_integer是为了获得column_name数据时,不需要用v_cols.extend//来为获取的数据显示开辟空间,如果没有index by pls_integer,//那么我们每次获取数据时都要为其显示的开辟空间,v_cols.extend;//关于bulk collect//采用bulk collect可以将查询结果一次性地加载到collections中。//而不是通过cursor一条一条地处理。SQL> exec pro_display_col('emp');EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO//SQL> exec pro_display_col('dept');DEPTNODNAMELOC////其实最简单的获取表字段的方法:SQL> col data_type format a13;SQL> select column_name,data_type,data_length,data_precision,data_scale2  from user_tab_columns3  where table_name=upper('emp');COLUMN_NAME                    DATA_TYPE     DATA_LENGTH DATA_PRECISION DATA_SCALE------------------------------ ------------- ----------- -------------- ----------EMPNO                          NUMBER                 22              4          0ENAME                          VARCHAR2               10                JOB                            VARCHAR2                9                MGR                            NUMBER                 22              4          0HIREDATE                       DATE                    7                SAL                            NUMBER                 22              7          2COMM                           NUMBER                 22              7          2DEPTNO                         NUMBER                 22              2          0//
  
  参考:
  user_source视图中存放着用户定义对象的代码:
  http://blog.csdn.net/BOBO12082119/archive/2011/05/02/6384525.aspx
  pls_integer:
  http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:5340131040835
  bulk collect:
  http://denver.blog.iyunv.com/272871/51630
  http://www.dba-oracle.com/t_oracle_bulk_collect.htm
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-248869-1-1.html 上篇帖子: oracle 求差集的方法 下篇帖子: Oracle 基本数据类型---(字符串)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表