create or replace test(invalue in varchar2)
is
strsql varchar2(4000);
begin
strsql := 'select * from mytable where a in (:invalue)';
execute immediate strsql using invalue;
end test;
类似于这样的功能应该怎么实现啊,注意我的a 字段是字符型的,也就是说输入的可能会是'aaa','bbb'类似于这样的值,不知道用数组可不可以实现,各位多帮帮小弟忙,不胜感激
11 个解决方案
#1
用动态SQL最简单了,否则要拆分字符串
#2
看一下:
http://www.oracle.com.cn/viewthread.php?tid=123823
注意 Oracle开发中的程序(procedure、function、trigger)要和 界面中的应用程序(.net、c#、jsp)分开,不要搅到一起。
http://www.oracle.com.cn/viewthread.php?tid=123823
注意 Oracle开发中的程序(procedure、function、trigger)要和 界面中的应用程序(.net、c#、jsp)分开,不要搅到一起。
#3
现在的问题是这样的因为有字符串判断的存在,而且我的表名什么的都是在变动的,所以必须要用拼字符串的方法来实现
#4
用动态SQL,用一个值接一下传进来得值,就可以了
例如:
如果invalue是'aa','bb'的形式的话
inTempValue := invalue ;
如果invalue是'aabbcc'的话就拆分字符串
例如:
如果invalue是'aa','bb'的形式的话
inTempValue := invalue ;
如果invalue是'aabbcc'的话就拆分字符串
#5
谢谢这位大哥,我现在只是想写一个后台的plsql,不涉及到前台
#6
FYI:问题14:
http://topic.csdn.net/u/20081002/00/f8d90ba2-e2bb-412a-a0c5-1b6d518fc22a.html
http://topic.csdn.net/u/20081002/00/f8d90ba2-e2bb-412a-a0c5-1b6d518fc22a.html
#7
问题是当传入的值是'aa','bb'的形式的话,我放到in()里面其中的,是不认的,也就是说我还是什么都查啊不出来啊,谢谢你的热心帮助
#8
ORACLE会把它当成一个字符串值,所以要改成下面的形式:
CREATE OR REPLACE TEST(INVALUE IN VARCHAR2)
IS
STRSQL VARCHAR2(4000);
BEGIN
STRSQL := 'SELECT * FROM MYTABLE WHERE A IN ('||INVALUE||')';
EXECUTE IMMEDIATE STRSQL;
END TEST;
#9
vc_sql2 := 'insert into test_range(weidu,smallrang,bigrange,numcount,SUMCOUNT,pen,sumpen)
SELECT :vc_weidu' || ',
to_char(' || i_init_range || ')' || ',to_char(' ||
(i_init_range + i_range) || ')
,COUNT(*)
,sum(' || vc_i_sumcount || ')
,round(COUNT(*)/(' || i_count || '),4)*100
,round(sum(' || vc_i_sumcount || ')/(' || i_sum ||
'),4)*100
from ' || temp_tablename || whsql || ' and round(' ||
vc_i_duliang || ') >= ' || i_init_range || '
and round(' || vc_i_duliang || ')<=' ||
(i_init_range + i_range) || ' and ' || vc_i_dimension ||
'=:vc_weidu2 ';
这是那个主要的SQL whsql里面是我的一些where条件,我现在主要要做的就是在里面再加入一个关于用到in或者exist这两个关键字的条件的筛选,但是碰到了很多的问题,怎么也走不通,不知道又没有人能给个解决方案,plsql里面这种传字符串实在是很不方便的。
#10
FYI: 8楼代码
#11
谢谢 mantisXF 的帮助,做得有点太灵活了,有点晕了,就这么解决吧,就让用户直接输入'a','b'的形式了,原理是想就输a,b,c的,看来很麻烦先去结贴了,多谢
#1
用动态SQL最简单了,否则要拆分字符串
#2
看一下:
http://www.oracle.com.cn/viewthread.php?tid=123823
注意 Oracle开发中的程序(procedure、function、trigger)要和 界面中的应用程序(.net、c#、jsp)分开,不要搅到一起。
http://www.oracle.com.cn/viewthread.php?tid=123823
注意 Oracle开发中的程序(procedure、function、trigger)要和 界面中的应用程序(.net、c#、jsp)分开,不要搅到一起。
#3
现在的问题是这样的因为有字符串判断的存在,而且我的表名什么的都是在变动的,所以必须要用拼字符串的方法来实现
#4
用动态SQL,用一个值接一下传进来得值,就可以了
例如:
如果invalue是'aa','bb'的形式的话
inTempValue := invalue ;
如果invalue是'aabbcc'的话就拆分字符串
例如:
如果invalue是'aa','bb'的形式的话
inTempValue := invalue ;
如果invalue是'aabbcc'的话就拆分字符串
#5
谢谢这位大哥,我现在只是想写一个后台的plsql,不涉及到前台
#6
FYI:问题14:
http://topic.csdn.net/u/20081002/00/f8d90ba2-e2bb-412a-a0c5-1b6d518fc22a.html
http://topic.csdn.net/u/20081002/00/f8d90ba2-e2bb-412a-a0c5-1b6d518fc22a.html
#7
问题是当传入的值是'aa','bb'的形式的话,我放到in()里面其中的,是不认的,也就是说我还是什么都查啊不出来啊,谢谢你的热心帮助
#8
ORACLE会把它当成一个字符串值,所以要改成下面的形式:
CREATE OR REPLACE TEST(INVALUE IN VARCHAR2)
IS
STRSQL VARCHAR2(4000);
BEGIN
STRSQL := 'SELECT * FROM MYTABLE WHERE A IN ('||INVALUE||')';
EXECUTE IMMEDIATE STRSQL;
END TEST;
#9
vc_sql2 := 'insert into test_range(weidu,smallrang,bigrange,numcount,SUMCOUNT,pen,sumpen)
SELECT :vc_weidu' || ',
to_char(' || i_init_range || ')' || ',to_char(' ||
(i_init_range + i_range) || ')
,COUNT(*)
,sum(' || vc_i_sumcount || ')
,round(COUNT(*)/(' || i_count || '),4)*100
,round(sum(' || vc_i_sumcount || ')/(' || i_sum ||
'),4)*100
from ' || temp_tablename || whsql || ' and round(' ||
vc_i_duliang || ') >= ' || i_init_range || '
and round(' || vc_i_duliang || ')<=' ||
(i_init_range + i_range) || ' and ' || vc_i_dimension ||
'=:vc_weidu2 ';
这是那个主要的SQL whsql里面是我的一些where条件,我现在主要要做的就是在里面再加入一个关于用到in或者exist这两个关键字的条件的筛选,但是碰到了很多的问题,怎么也走不通,不知道又没有人能给个解决方案,plsql里面这种传字符串实在是很不方便的。
#10
FYI: 8楼代码
#11
谢谢 mantisXF 的帮助,做得有点太灵活了,有点晕了,就这么解决吧,就让用户直接输入'a','b'的形式了,原理是想就输a,b,c的,看来很麻烦先去结贴了,多谢