sql返回值oracle
发布时间: 2024-12-16 10:09:06
A. 怎么用Oracle 存过中执行多个查询sql 并返回结果,SQL和返回结果都存在一张表里面
你这种要求不应该这么设计,首先你十几条的SQL的结果集字段类型和个数不一定一样,所以没法存储,只有你的SQL返回的结果集都一样或者可以枚举且字段类型均一样,这样就可以用自定义类型作为B字段。
解决方案一:单表存储结果
思路:要求所有的SQL返回结果集列数不多于N个,然后创建一个N个字段的TYPE,此处假设N=5,代码如下:
--创建多个字段的type
createorreplacetypetest_column_typeasobject(
col_1varchar2(300),
col_2varchar2(300),
col_3varchar2(300),
col_4varchar2(300),
col_5varchar2(300)
);
--创建引用多个字段的type
createorreplacetypetest_tab_column_typeastableoftest_column_type;
--创建表
createtabletest_tab(
avarchar2(300),
btest_tab_column_type)
nestedtablebstoreasnested_tabreturnasvalue;
--写数据的语句
insertintotest_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的结果,大致如下:
createt_sql(
idnumber,
avarchar2(3000)
);
createt_sql_result(
idnumber,
col1varchar2(400),
col2varchar2(400),
...
colNvarchar2(400)
);
如果所有SQL返回的列数都一样,那很简单,直接写到 t_sql_result 表里面即可。
如果SQL返回的列数不一样,则需要判断每个sql返回的列数,然后拼接动态SQL,将结果写入t_sql_result 表。
B. Oracle 输入sql命令后 返回值全都是2 怎么回事
2表示第二行。
在sqlplus工具中分号才是结尾。如果在一个sql语句的结尾没有写分号,那么sqlplus认为该sql语句没有完成,回车为换行,那么oracle就自动命名原来的为第一行,现在编辑的为第二行,如果再输入一个回车,那么就会出现3,以此类推,直到出现分号为止。
sqlplus是最基础的oracle数据库交互工具,现在的其他oracle交互工具都是在此基础上发展而来。sqlplus秉承着严格的sql规范,没有对任何的功能进行打包,一切内容都需要手动输入,所以包括在其他工具中可以免除的分号等,在sqlplus中也需要完整输入才可以。
热点内容