问题描述:
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
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
解决方案 »
- 急求java.lang.Exception: Exception in sending Request :: null的原因
- oracle中的varchar2(100 char)是什么类型
- ORA-12514:TNS:无法解析指定的连接标识符(怎么解决)
- 实现AAAA到ZZZZ
- 从未见之怪现象 select sysdate from dual 带不带服务名连接 结果不一致
- 如何将sql server 数据库转为Oracle数据库?
- 求一个function
- 急:如何查看oracle数据库的属性设置?(在线)
- 删除数据库之前忘了删除例程了,怎么再删除这些例程?
- 执行SQL语句!
- 有急诊啊,大夫们快来啊!
- sql server触发器转换为Oracle,谢谢!
或者说,本问题的核心是如何将
varchar2 类型的1,5,6,45,46
表达式化
使用exectue immediate的方法。
主体语句如下:
begin
execute immediate 'select *from ZSYWYJ.QD_QX_MENU where menu_id in ('||你编号1得到的字符串||')';
end;
可以通过程序传进数据库执行吗?如何传进数据库
java的jdbc可以传exectue immediate吗?
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 20B_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 )
这样就可以了,但可能执行速度有点慢
where instr(','||'1,5,6,45,46'||',', ','||to_char(menu_id)||',' )>0