哦,不好意思,我说得不清楚。 就是从未知个数的表取出未知个数的位置列,sql如下 select X1,X2,X3....Xn from Y1,Y2,Y3...Y4 我想在pl/sql中,将这种动态拼成的sql语句取出来的值在拼成xml格式再传出去,但我现在不知道该怎么取值.....
啊..还多表连接?取的列是这些表的全部列? 可以从数据字典中查询列名,再拼起来 select column_name from user_tab_cols where table_name=upper(:tablename)
就是对数据库里有什么东西完全不知道,但是想得到所有数据 是这种情况? 觉得应该这样,先查用户表,查到用户表后取每个用户表的所有数据..... 猜测.... 查所有用户表:SELECT T FROM USER_TABLES T; 查表的列:select * from all_tab_columns where table_name in (SELECT T.TABLE_NAME FROM USER_TABLES T)
程序如下:CREATE OR REPLACE PROCEDURE NCSSYS.TEST IS type cutype is ref cursor; cv cutype; NN number:=1; BEGIN execute immediate 'select * from SYAIN '; 在这里我要取syain表中第二列的值 END TEST;貌似里答案不远了哈
execute immediate 'select * from SYAIN ';这一句没什么用要去值的话就 select col2 into 你的变量 from syain;
第二列是什么概念 最好指定列名 可以根据数据字典来查 select table_name,column_name,column_id,data_type from user_tab_cols 这个column_id应该就是你要的“第几列” 再用游标来取值拼 没问题吧?
我也在关注这个问题, 因为sql语句是拼出来的,列名和列数都是变化的 不能用select into from 因为into后的变量个数是固定的 除非是二维数组 貌似二维数组还不能在这里用
我搜到了这样一个答案************ oracle: ************ var strsql varchar2(3000); --定义一个用于返回结果集的变量 var p_cursor refcursor; --执行plsql拼装字符串并返回结果集 begin :strsql:='select '; for v_cur in (select column_name from all_tab_columns where table_name='T3' and column_name<> 'ID') loop :strsql:=:strsql||v_cur.column_name||','; end loop; :strsql:=rtrim(:strsql,',')||' from t3'; open :p_cursor for :strsql; end; / --输出结果集 print :p_cursor;貌似也不和我用,数据输出还要加工成htm表格的
select * from y ?
就是从未知个数的表取出未知个数的位置列,sql如下
select X1,X2,X3....Xn from Y1,Y2,Y3...Y4
我想在pl/sql中,将这种动态拼成的sql语句取出来的值在拼成xml格式再传出去,但我现在不知道该怎么取值.....
可以从数据字典中查询列名,再拼起来
select column_name from user_tab_cols where table_name=upper(:tablename)
是这种情况?
觉得应该这样,先查用户表,查到用户表后取每个用户表的所有数据.....
猜测....
查所有用户表:SELECT T FROM USER_TABLES T;
查表的列:select * from all_tab_columns where table_name in
(SELECT T.TABLE_NAME FROM USER_TABLES T)
while(@row = $sth->fetchrow_array){
if($COUNT<37){
for($i=0;$i<$L;$i++){
$response=$response."&&C".$i."_".$COUNT."::".$row[$i]."&&FormID".$i."::".@FormName[$i];
}
$COUNT++;
}
}
select 列1 列2 FROM 目标表不就行了吗```
语句不好写就写个循环拼SQL
sql语句拼出来了,那就用 execute immediate strSQL; 去取结果不知道问的是不是这个意思啊。。
IS
type cutype is ref cursor;
cv cutype;
NN number:=1;
BEGIN
execute immediate 'select * from SYAIN ';
在这里我要取syain表中第二列的值
END TEST;貌似里答案不远了哈
execute immediate 'select * from SYAIN ';这一句没什么用要去值的话就 select col2 into 你的变量 from syain;
http://group.gimoo.net/review/108531
最好指定列名
可以根据数据字典来查
select table_name,column_name,column_id,data_type from user_tab_cols
这个column_id应该就是你要的“第几列”
再用游标来取值拼
没问题吧?
我也在关注这个问题,
因为sql语句是拼出来的,列名和列数都是变化的
不能用select into from
因为into后的变量个数是固定的
除非是二维数组
貌似二维数组还不能在这里用
oracle:
************
var strsql varchar2(3000);
--定义一个用于返回结果集的变量
var p_cursor refcursor;
--执行plsql拼装字符串并返回结果集
begin
:strsql:='select ';
for v_cur in (select column_name from all_tab_columns where table_name='T3' and column_name<> 'ID')
loop
:strsql:=:strsql||v_cur.column_name||',';
end loop;
:strsql:=rtrim(:strsql,',')||' from t3';
open :p_cursor for :strsql;
end;
/
--输出结果集
print :p_cursor;貌似也不和我用,数据输出还要加工成htm表格的