oracle 求sql语句写法

qw1wqw1w 2008-07-27 06:12:49
问题描述:
1.通过一条sql
select menu_ids from ACTION_ROLE where action_role_id=1
查询出menu_ids 的值为 1,5,6,45,46 其数据类型为varchar2(1000)
2.下面一条sql语句需要用到数值类型的1,5,6,45,46.语句如下:
select *from ZSYWYJ.QD_QX_MENU where menu_id in (?)

问题:现在需要将通过编号为1的sql查出来的varchar2(1000)类型的 1,5,6,45,46 传进编号为2的sql
的问号部分,注意编号2 sql 的menu_id为number类型

本问提的核心是,如何将varchar2类型的1,5,6,45,46转换成用逗号分开的数值型1,5,6,45,46
...全文
142 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
山林73 2008-08-06
  • 打赏
  • 举报
回复
select *from ZSYWYJ.QD_QX_MENU
where instr(','||'1,5,6,45,46'||',', ','||to_char(menu_id)||',' )>0
catamite 2008-07-27
  • 打赏
  • 举报
回复
select *from ZSYWYJ.QD_QX_MENU where menu_id in (select menu_ids from ACTION_ROLE where action_role_id=1)
这样就可以了,但可能执行速度有点慢
cosio 2008-07-27
  • 打赏
  • 举报
回复
改一下思路!给一个例子:

SQL> desc a_file
Name Type Nullable Default Comments
---- ------------ -------- ------- --------
A01 INTEGER Y
A02 INTEGER Y
A03 NVARCHAR2(2) Y

SQL> desc b_file
Name Type Nullable Default Comments
---- ----------- -------- ------- --------
B01 INTEGER Y
B02 INTEGER Y
B03 VARCHAR2(1) Y

看一下表A03和B02字段,一个是字符一个是数值

A_file 数值:
1 1 11 11
2 2 12 12
3 3 13 13
4 4 14 14
5 5 15 15
6 6 16 16
7 7 17 17
8 8 18 18
9 9 19 19
10 10 20 20

B_file :
1 111 11 0
2 212 12 0
3 313 13 0
4 414 14 0
5 515 15 0


现在看选择语句
select * from a_file where a03 in(select b02 from b_file)子

这里的A03是NVARCHAR(2) 而b02是INT,系统可以自动转换!

结果如下:

1 1 11 11
2 2 12 12
3 3 13 13
4 4 14 14
5 5 15 15



你上面的就可以直接用语句写出来!

select *from ZSYWYJ.QD_QX_MENU where menu_id in (select menu_ids from ACTION_ROLE where action_role_id=1 )


qw1wqw1w 2008-07-27
  • 打赏
  • 举报
回复
感谢2楼3楼的回答!!!

利用 exectue immediate
可以通过程序传进数据库执行吗?如何传进数据库
java的jdbc可以传exectue immediate吗?
mantisXF 2008-07-27
  • 打赏
  • 举报
回复
如果menu_id为number类型,楼上的方法可以的。 因为如果menu_id为varchar类型,那么相应的数值应该是:

select *from ZSYWYJ.QD_QX_MENU where menu_id in ('1','5','6','45','46');


[Quote=引用楼主 qw1wqw1w 的帖子:]
问题描述:
1.通过一条sql
select menu_ids from ACTION_ROLE where action_role_id=1
查询出menu_ids 的值为 1,5,6,45,46 其数据类型为varchar2(1000)
2.下面一条sql语句需要用到数值类型的1,5,6,45,46.语句如下:
select *from ZSYWYJ.QD_QX_MENU where menu_id in (?)

问题:现在需要将通过编号为1的sql查出来的varchar2(1000)类型的 1,5,6,45,46 传进编号为2的sql
的问号部分,注意编号2 sql 的menu_id为numbe…
[/Quote]
oracledbalgtu 2008-07-27
  • 打赏
  • 举报
回复

使用exectue immediate的方法。
主体语句如下:
begin
execute immediate 'select *from ZSYWYJ.QD_QX_MENU where menu_id in ('||你编号1得到的字符串||')';
end;



[Quote=引用楼主 qw1wqw1w 的帖子:]
问题描述:
1.通过一条sql
select menu_ids from ACTION_ROLE where action_role_id=1
查询出menu_ids 的值为 1,5,6,45,46 其数据类型为varchar2(1000)
2.下面一条sql语句需要用到数值类型的1,5,6,45,46.语句如下:
select *from ZSYWYJ.QD_QX_MENU where menu_id in (?)

问题:现在需要将通过编号为1的sql查出来的varchar2(1000)类型的 1,5,6,45,46 传进编号为2的sql
的问号部分,注意编号2 sql 的menu_id为numbe…
[/Quote]
qw1wqw1w 2008-07-27
  • 打赏
  • 举报
回复
问题描述补充:
或者说,本问题的核心是如何将
varchar2 类型的1,5,6,45,46
表达式化

17,090

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧