我有一个想法就是把动态的部分数据先查找出来,放到临时表或者游标什么的上面,或者是动态创建一个视图。但试过都不成功。不知道有没有人遇到过类似情况???又怎么样解决?
27 个解决方案
#1
动态执行 ?还没理解?
#2
弄个动态语句配置表,分查找的字段,表,where条件 几列,然后程序里通过配置表动态生成sql语句
#3
在function里面,return ref cursor
#4
SQL人人拼,易不易读靠自己。
你完全可以在拼sql的时候把书写格式写成你易读的, 把拼接结果也写成你易读的
动态表名,不好意思只能用拼接
否则你只能,根据动态表的个数 写N个表名不同的sql。
你完全可以在拼sql的时候把书写格式写成你易读的, 把拼接结果也写成你易读的
动态表名,不好意思只能用拼接
否则你只能,根据动态表的个数 写N个表名不同的sql。
#5
你这个实质就是把数据库提到程序上执行了吧,我的意思是写全程在数据库层执行,存储过程或者函数或者包之类的
#6
你的意思是把表名作为参数传到函数里面,把查询结果作为游标返回?
#7
其实主要差别就是拼接的时候,变量要
'where a='''||变量||''' and 其他字符串'||但是直接写的时候变量周围不需要引号也不需要||连接
#8
sql_str := 'SELECT A.id '||chr(13)||
' A.name '||chr(13)||
' FROM A '||chr(13)||
' WHERE A.ID = '||chr(39)||变量1||||chr(39);
--这有什么不好读的?
#9
返回一个游标又能怎么样? 你能把一个结果集作为另一个查询的子查询?
#10
我说的程序就是指数据库的存储过程拉,在存储过程里读取配置表,生成动态语句,然后动态执行。
#11
生成动态语句你的这一步怎么实现
#12
我也不理解3楼的意思
#13
那如果客户的需要又变了,另外又要连接多一张表进行查询,那你又怎么样可以快速地更改SQL进行测试?而不是等到存储过程在执行的过程中,查看变量再把语句提取才能看到才修改呢
#14
楼主能否把你的问题再详细描述一篇,最好有例子,想要的结果。现在我还不是很明白楼主你要解决的问题是什么
#15
本身根据需求不一样变化表名的处理方式就是垃圾的方式,既然你选择了这种方式,就要承担这种方式的后果
事情没有绝对的完美,只有相对的平衡
你选择了少写代码,动态拼接,就要承受这样带来后期维护的痛苦
你想减轻后期维护的痛苦,就像你说的客户需求变化,你就要在前期付出努力
鱼和熊掌不能兼得
#16
呃,是这样子,我不是不知道现在的SQL怎么写,而是求高效率的写法。而现在觉得不高效率的是里面有一段表名动态查询的部分,对于维护不高效率。
情景就类似于这样吧 http://zhidao.baidu.com/question/489664010.html
情景就类似于这样吧 http://zhidao.baidu.com/question/489664010.html
#17
前期表不是我建立的……
#18
begin
str_sql:=create table ||table_name||(||field1|| ||datatype1||,||field2|| ||datatype2||);
execute immediate str_sql; --动态执行DDL语句
exception
when others then
null;
end ;
#19
看了那情景,你的表是动态的,没办法,只能动态拼了,要不然你想要达到怎么个高效,方便维护?
#20
您这语句没有多大意义吧,在查询的时候也是要动态拼接,为啥还要动态创建表呢
#21
就是不知道所以问……我是求思路的
#22
思路已经告诉你了,你不听,咋办?
#23
没有不听啊,在综合考虑中
#24
呵呵,那祝好运。
#25
http://www.16kan.com/post/216040.html
#26
连功能都完成不了谈效率,谈笑话吧。
#27
#1
动态执行 ?还没理解?
#2
弄个动态语句配置表,分查找的字段,表,where条件 几列,然后程序里通过配置表动态生成sql语句
#3
在function里面,return ref cursor
#4
SQL人人拼,易不易读靠自己。
你完全可以在拼sql的时候把书写格式写成你易读的, 把拼接结果也写成你易读的
动态表名,不好意思只能用拼接
否则你只能,根据动态表的个数 写N个表名不同的sql。
你完全可以在拼sql的时候把书写格式写成你易读的, 把拼接结果也写成你易读的
动态表名,不好意思只能用拼接
否则你只能,根据动态表的个数 写N个表名不同的sql。
#5
你这个实质就是把数据库提到程序上执行了吧,我的意思是写全程在数据库层执行,存储过程或者函数或者包之类的
#6
你的意思是把表名作为参数传到函数里面,把查询结果作为游标返回?
#7
其实主要差别就是拼接的时候,变量要
'where a='''||变量||''' and 其他字符串'||但是直接写的时候变量周围不需要引号也不需要||连接
#8
sql_str := 'SELECT A.id '||chr(13)||
' A.name '||chr(13)||
' FROM A '||chr(13)||
' WHERE A.ID = '||chr(39)||变量1||||chr(39);
--这有什么不好读的?
#9
返回一个游标又能怎么样? 你能把一个结果集作为另一个查询的子查询?
#10
我说的程序就是指数据库的存储过程拉,在存储过程里读取配置表,生成动态语句,然后动态执行。
#11
生成动态语句你的这一步怎么实现
#12
我也不理解3楼的意思
#13
那如果客户的需要又变了,另外又要连接多一张表进行查询,那你又怎么样可以快速地更改SQL进行测试?而不是等到存储过程在执行的过程中,查看变量再把语句提取才能看到才修改呢
#14
楼主能否把你的问题再详细描述一篇,最好有例子,想要的结果。现在我还不是很明白楼主你要解决的问题是什么
#15
本身根据需求不一样变化表名的处理方式就是垃圾的方式,既然你选择了这种方式,就要承担这种方式的后果
事情没有绝对的完美,只有相对的平衡
你选择了少写代码,动态拼接,就要承受这样带来后期维护的痛苦
你想减轻后期维护的痛苦,就像你说的客户需求变化,你就要在前期付出努力
鱼和熊掌不能兼得
#16
呃,是这样子,我不是不知道现在的SQL怎么写,而是求高效率的写法。而现在觉得不高效率的是里面有一段表名动态查询的部分,对于维护不高效率。
情景就类似于这样吧 http://zhidao.baidu.com/question/489664010.html
情景就类似于这样吧 http://zhidao.baidu.com/question/489664010.html
#17
前期表不是我建立的……
#18
begin
str_sql:=create table ||table_name||(||field1|| ||datatype1||,||field2|| ||datatype2||);
execute immediate str_sql; --动态执行DDL语句
exception
when others then
null;
end ;
#19
看了那情景,你的表是动态的,没办法,只能动态拼了,要不然你想要达到怎么个高效,方便维护?
#20
您这语句没有多大意义吧,在查询的时候也是要动态拼接,为啥还要动态创建表呢
#21
就是不知道所以问……我是求思路的
#22
思路已经告诉你了,你不听,咋办?
#23
没有不听啊,在综合考虑中
#24
呵呵,那祝好运。
#25
http://www.16kan.com/post/216040.html
#26
连功能都完成不了谈效率,谈笑话吧。