//在存储过程里面,我们常常将从一个表里面查询到的字段数据复制给一写变量,
//然后调用包里面的函数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;
begin
select 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)
as
type arry_type is table of varchar2(30) index by pls_integer;
v_cols arry_type;
begin
select tc.column_name bulk collect
into v_cols
from user_tab_columns tc
where tc.table_name=upper(table_name_in);
for i in 1..v_cols.count
loop
dbms_output.put_line(v_cols(i));
end loop;
exception
when others then
dbms_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');
EMPNO
ENAME
JOB
MGR
HIREDATE
SAL
COMM
DEPTNO
//
SQL> exec pro_display_col('dept');
DEPTNO
DNAME
LOC
//
//其实最简单的获取表字段的方法:
SQL> col data_type format a13;
SQL> select column_name,data_type,data_length,data_precision,data_scale
2 from user_tab_columns
3 where table_name=upper('emp');
COLUMN_NAME DATA_TYPE DATA_LENGTH DATA_PRECISION DATA_SCALE
------------------------------ ------------- ----------- -------------- ----------
EMPNO NUMBER 22 4 0
ENAME VARCHAR2 10
JOB VARCHAR2 9
MGR NUMBER 22 4 0
HIREDATE DATE 7
SAL NUMBER 22 7 2
COMM NUMBER 22 7 2
DEPTNO NUMBER 22 2 0
//
当前位置: 数据库>oracle
Oracle 用过程获得表的字段
来源: 互联网 发布时间:2017-04-03
本文导语: //在存储过程里面,我们常常将从一个表里面查询到的字段数据复制给一写变量, //然后调用包里面的函数dbms_output.put_line()来将其打印出来; //下面是一个实例: procedure show_employee(empno_in in emp.empno%type) as ...