怎么用Oracle 存过中执行多个查询SQL 并返回结果,SQL和返回结果都存在一张表里面 5
请问怎么用存过执行多个查询SQL并返回结果,SQL和返回结果都存在一张表里面,比如Table_1里面字段A存需要执行的SQL,字段B存跑的结果,有几十条需要执行的SQL,...
请问怎么用存过执行多个查询SQL 并返回结果,SQL和返回结果都存在一张表里面,比如Table_1里面字段A存需要执行的SQL,字段B存跑的结果,有几十条需要执行的SQL,一个SQL一条记录,有大神能帮忙写一个存过么,谢谢~
展开
3个回答
展开全部
你这种要求不应该这么设计,首先你十几条的SQL的结果集字段类型和个数不一定一样,所以没法存储,只有你的SQL返回的结果集都一样或者可以枚举且字段类型均一样,这样就可以用自定义类型作为B字段。
解决方案一:单表存储结果
思路:要求所有的SQL返回结果集列数不多于N个,然后创建一个N个字段的TYPE,此处假设N=5,代码如下:
--创建多个字段的type
create or replace type test_column_type as object (
col_1 varchar2(300),
col_2 varchar2(300),
col_3 varchar2(300),
col_4 varchar2(300),
col_5 varchar2(300)
);
--创建引用多个字段的type
create or replace type test_tab_column_type as table of test_column_type;
--创建表
create table test_tab (
a varchar2(300),
b test_tab_column_type)
nested table b store as nested_tab return as value;
--写数据的语句
insert into test_tab
values
('1',test_tab_column_type(test_column_type(1,1,1,1,1),test_column_type(2,2,2,2,2)));
解决方案二:多表存储结果
思路:主子表,先创建一个表只用来存SQL,另外一个表存SQL的结果,大致如下:
create t_sql(
id number,
a varchar2(3000)
);
create t_sql_result(
id number,
col1 varchar2(400),
col2 varchar2(400),
...
colN varchar2(400)
);
如果所有SQL返回的列数都一样,那很简单,直接写到 t_sql_result 表里面即可。
如果SQL返回的列数不一样,则需要判断每个sql返回的列数,然后拼接动态SQL,将结果写入 t_sql_result 表。
展开全部
set feedback off heading off term off
set pages 0 trim on trims on lines 32767 long 999999
set echo off
spool result.sql
Select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0;
spool off
把以上部分放入一个脚本文件中再执行,会在当前目录下生成你要的文件result.sql
set pages 0 trim on trims on lines 32767 long 999999
set echo off
spool result.sql
Select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0;
spool off
把以上部分放入一个脚本文件中再执行,会在当前目录下生成你要的文件result.sql
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
直接用spool轻轻松松, 不要把简单的问题想复杂
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询