create or replace p_test(v_sql varchar2) is tmp_sql varchar2(256); i number:=0; type cur_proc is ref cursor; c_proc cur_proc; begin tmp_sql:='create table tmp_table as '|| v_sql; execute tmp_sql; open c_proc is select column_name from user_tab_columns where table_name='TMP_TABLE'; loop dbms_output.put_line(c_proc.column_name); i:=i+1; end loop; dbms_output.put_line('共有'||i||'个字段'); drop table tmp_table; end; 没测试,不知道行不行 大体思路是建立一个跟传进来的sql结构一样的临时表,然后从系统表中读取字段名称及个数,最后删除临时表! 不知道有没有更简单的方法,楼下接着说:)
open c_proc is select column_name from user_tab_columns where table_name='TMP_TABLE'; 写错了 open c_proc for select column_name from user_tab_columns where table_name='TMP_TABLE';
使用动态SQL create view as 输入的SQL语句,然后查询它对应的数据字典。
Dim dbConnect As OleDbConnection
dbConnect = New OleDbConnection(strDBConStr)
dbConnect.Open() Dim dt As DataTable = dbConnect.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, New Object() {Nothing, Nothing, TableName})备注:
1、其中strDBConStr为联结DB的字符串。
2、dt的返回结果类似如下:
{ dt:
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME .....DOMAIN_NAME TAB00 TAB2 NAME 1 False 24 False 131 10 0
TAB00 TAB2 OLD 2 False 24 False 131 10 0
.........
}
3、第三列就是字段名,记录行数就是字段个数。
写个按照表进行查询字段名、统计字段个数的过程;每次调用,把使用到的表传到你的过程中。当然如何以表为参数查出字段名、统计字段个数,我也不z到了,DBA的高手应该知道。
is
tmp_sql varchar2(256);
i number:=0;
type cur_proc is ref cursor;
c_proc cur_proc;
begin
tmp_sql:='create table tmp_table as '|| v_sql;
execute tmp_sql;
open c_proc is select column_name from user_tab_columns where table_name='TMP_TABLE';
loop
dbms_output.put_line(c_proc.column_name);
i:=i+1;
end loop;
dbms_output.put_line('共有'||i||'个字段');
drop table tmp_table;
end;
没测试,不知道行不行
大体思路是建立一个跟传进来的sql结构一样的临时表,然后从系统表中读取字段名称及个数,最后删除临时表!
不知道有没有更简单的方法,楼下接着说:)
写错了
open c_proc for select column_name from user_tab_columns where table_name='TMP_TABLE';